[Python-checkins] r55632 - in python/branches/bcannon-objcap: BRANCH_NOTES secure_python.c tests/fail/builtin_execfile--NameError.py tests/fail/builtin_open--NameError.py tests/fail/execfile__builtin__--AttributeError.py tests/fail/execfile__builtins__--AttributeError.py tests/fail/file_constructor--TypeError.py tests/fail/import_unsafe_builtin--ImportError.py tests/fail/import_unsafe_extension--ImportError.py tests/fail/open__builtin__--AttributeError.py tests/fail/open__builtins__--AttributeError.py tests/succeed/import_py.py tests/succeed/import_safe_builtin.py tests/succeed/import_safe_extension.py
brett.cannon
python-checkins at python.org
Tue May 29 03:31:38 CEST 2007
Author: brett.cannon
Date: Tue May 29 03:31:34 2007
New Revision: 55632
Modified:
python/branches/bcannon-objcap/BRANCH_NOTES
python/branches/bcannon-objcap/secure_python.c
python/branches/bcannon-objcap/tests/fail/builtin_execfile--NameError.py
python/branches/bcannon-objcap/tests/fail/builtin_open--NameError.py
python/branches/bcannon-objcap/tests/fail/execfile__builtin__--AttributeError.py
python/branches/bcannon-objcap/tests/fail/execfile__builtins__--AttributeError.py
python/branches/bcannon-objcap/tests/fail/file_constructor--TypeError.py
python/branches/bcannon-objcap/tests/fail/import_unsafe_builtin--ImportError.py
python/branches/bcannon-objcap/tests/fail/import_unsafe_extension--ImportError.py
python/branches/bcannon-objcap/tests/fail/open__builtin__--AttributeError.py
python/branches/bcannon-objcap/tests/fail/open__builtins__--AttributeError.py
python/branches/bcannon-objcap/tests/succeed/import_py.py
python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py
python/branches/bcannon-objcap/tests/succeed/import_safe_extension.py
Log:
Flesh out import tests along with built-in object access.
Modified: python/branches/bcannon-objcap/BRANCH_NOTES
==============================================================================
--- python/branches/bcannon-objcap/BRANCH_NOTES (original)
+++ python/branches/bcannon-objcap/BRANCH_NOTES Tue May 29 03:31:34 2007
@@ -3,17 +3,35 @@
=======
Attempt to develop some form of security model for Python.
-=====
-Usage
-=====
+
+==================
+Build instructions
+==================
1. Build Python as normal.
2. Run ``build_secure_py.sh`` to build ``secure_python.exe``.
-======
-Status
-======
-* Turn on whitelisting.
- - Verify injecting 'open' into importlib works.
+
+=======
+Testing
+=======
+Execute ``run_security_tests.py`` with ``secure_python.exe`` to run security
+tests. Do not expect normal tests to pass as critical modules might be blocked
+from being imported.
+
+
+=============
+Failing Tests
+=============
+* Lib/tests/test_xmlrpc.py
+ + Fails with insecure Python.
+ + Requires sys.setdefaultencoding() which is deleted by site.py .
+ + reload(sys) normally adds it, but hack to do a fresh import on sys is
+ preventing that from happening somehow.
+
+
+=====
+To Do
+=====
* Write tests.
- Import
+ Delegate protects importlib.
@@ -21,14 +39,10 @@
* Name fall-through to alternate implementation.
+ '.hidden' cannot be imported.
+ Removed modules cannot be imported (unless whitelisted).
- - Built-in namespace properly cleansed.
- + Nothing exposed through __builtin__ or __builtins__.
+ + 'sys' not exposed on any modules needed for interpreter.
- Types crippled.
- + file
+ code
-* Fix 'sys' module reloading.
- - test_xmlrpc relies on reloading sys to get setdefaultencoding, but hack
- to allow re-import of sys doesn't let this work.
+
==========
References
Modified: python/branches/bcannon-objcap/secure_python.c
==============================================================================
--- python/branches/bcannon-objcap/secure_python.c (original)
+++ python/branches/bcannon-objcap/secure_python.c Tue May 29 03:31:34 2007
@@ -27,6 +27,7 @@
PyObject *import_module;
PyObject *import_callable;
Py_ssize_t safe_builtins_count = 7;
+ /* All whitelisted modules should be imported in the proper test file. */
const char *safe_builtins_names[] = {"_ast", "_codecs", "_sre",
"_symtable", "_types", "errno",
"exceptions"};
@@ -34,9 +35,18 @@
const char *safe_frozen_names[] = {};
PyObject *safe_builtins_seq;
PyObject *safe_frozen_seq;
- Py_ssize_t safe_extensions_count = 5;
- const char *safe_extensions_names[] = {"binascii", "cmath", "math",
- "operator", "time"};
+ Py_ssize_t safe_extensions_count = 18;
+ /* All whitelisted modules should be imported in the proper test file. */
+ const char *safe_extensions_names[] = {"_bisect", "_collections", "_csv",
+ "_functools", "_hashlib",
+ "_heapq", "_random",
+ "_struct", "_weakref",
+ "array",
+ "binascii", "cmath",
+ "itertools",
+ "math",
+ "operator",
+ "time", "unicodedata", "zlib"};
PyObject *safe_extensions_seq;
/* Initialize interpreter. */
Modified: python/branches/bcannon-objcap/tests/fail/builtin_execfile--NameError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/builtin_execfile--NameError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/builtin_execfile--NameError.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
+"""'execfile' should not be in the built-in namespace."""
_ = execfile
Modified: python/branches/bcannon-objcap/tests/fail/builtin_open--NameError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/builtin_open--NameError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/builtin_open--NameError.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
+"""'open' should not be in the built-in namespace."""
_ = open
Modified: python/branches/bcannon-objcap/tests/fail/execfile__builtin__--AttributeError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/execfile__builtin__--AttributeError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/execfile__builtin__--AttributeError.py Tue May 29 03:31:34 2007
@@ -1,2 +1,3 @@
+"""'execfile' should not be accessible from __builtin__."""
import __builtin__
__builtin__.execfile
Modified: python/branches/bcannon-objcap/tests/fail/execfile__builtins__--AttributeError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/execfile__builtins__--AttributeError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/execfile__builtins__--AttributeError.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
+"""'execfile' should not be accessible from __builtins__."""
__builtins__.execfile
Modified: python/branches/bcannon-objcap/tests/fail/file_constructor--TypeError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/file_constructor--TypeError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/file_constructor--TypeError.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
+"""The constructor for 'file' should not work to open a file."""
_ = file('README', 'r')
Modified: python/branches/bcannon-objcap/tests/fail/import_unsafe_builtin--ImportError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/import_unsafe_builtin--ImportError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/import_unsafe_builtin--ImportError.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
+"""You should not be able to import non-whitelisted modules, especially sys."""
import sys
Modified: python/branches/bcannon-objcap/tests/fail/import_unsafe_extension--ImportError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/import_unsafe_extension--ImportError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/import_unsafe_extension--ImportError.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
-import termios
+"""Importing non-whitelisted extension modules should fail."""
+import thread
Modified: python/branches/bcannon-objcap/tests/fail/open__builtin__--AttributeError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/open__builtin__--AttributeError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/open__builtin__--AttributeError.py Tue May 29 03:31:34 2007
@@ -1,2 +1,3 @@
+"""'open' should not exist in __builtin__."""
import __builtin__
__builtin__.open
Modified: python/branches/bcannon-objcap/tests/fail/open__builtins__--AttributeError.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/open__builtins__--AttributeError.py (original)
+++ python/branches/bcannon-objcap/tests/fail/open__builtins__--AttributeError.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
+"""'open' should not be in __builtins__."""
__builtins__.open
Modified: python/branches/bcannon-objcap/tests/succeed/import_py.py
==============================================================================
--- python/branches/bcannon-objcap/tests/succeed/import_py.py (original)
+++ python/branches/bcannon-objcap/tests/succeed/import_py.py Tue May 29 03:31:34 2007
@@ -1 +1,2 @@
+"""Make sure a Python source code file can be imported."""
import token
Modified: python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py
==============================================================================
--- python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py (original)
+++ python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py Tue May 29 03:31:34 2007
@@ -1 +1,7 @@
+"""Make sure that all whitelisted built-in modules can be imported."""
+import _ast
+import _codecs
+import _sre
+import _types
import errno
+import exceptions
Modified: python/branches/bcannon-objcap/tests/succeed/import_safe_extension.py
==============================================================================
--- python/branches/bcannon-objcap/tests/succeed/import_safe_extension.py (original)
+++ python/branches/bcannon-objcap/tests/succeed/import_safe_extension.py Tue May 29 03:31:34 2007
@@ -1 +1,19 @@
+"""All whitelisted extension modules should be able to be imported."""
+import _bisect
+import _collections
+import _csv
+import _functools
+import _hashlib
+import _heapq
+import _random
+import _struct
+import _weakref
+import array
+import binascii
+import cmath
+import itertools
+import math
+import operator
import time
+import unicodedata
+import zlib
More information about the Python-checkins
mailing list