[tor-commits] [ooni-probe/master] Fix vulnerability that allowed arbitrary files specified in decks to be executed.

art at torproject.org art at torproject.org
Wed Apr 30 17:30:23 UTC 2014


commit 572e68a859f3241ca257f940c415d22a81bf45d0
Author: Arturo Filastò <art at fuffa.org>
Date:   Tue Apr 22 21:44:23 2014 +0200

    Fix vulnerability that allowed arbitrary files specified in decks to be executed.
---
 ooni/deck.py    |   15 ++++++++++-----
 ooni/oonicli.py |    2 +-
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/ooni/deck.py b/ooni/deck.py
index cfd5d73..8a26d0c 100644
--- a/ooni/deck.py
+++ b/ooni/deck.py
@@ -6,6 +6,7 @@ from ooni.settings import config
 from ooni.utils import log
 from ooni import errors as e
 
+from twisted.python.filepath import FilePath
 from twisted.internet import reactor, defer
 
 import os
@@ -65,19 +66,23 @@ class InputFile(object):
             file_hash = sha256(f.read())
             assert file_hash.hexdigest() == digest
 
-def nettest_to_path(path):
+def nettest_to_path(path, allow_arbitrary_paths=False):
     """
     Takes as input either a path or a nettest name.
     
+    Args:
+
+        allow_arbitrary_paths:
+            allow also paths that are not relative to the nettest_directory.
+
     Returns:
 
         full path to the nettest file.
     """
-    path_via_name = os.path.join(config.nettest_directory, path + '.py')
-    if os.path.exists(path):
+    if allow_arbitrary_paths and os.path.exists(path):
         return path
-    elif os.path.exists(path_via_name):
-        return path_via_name
+    elif FilePath(config.nettest_directory).preauthChild(path + '.py').exists():
+        return os.path.join(config.nettest_directory, path + '.py')
     else:
         raise e.NetTestNotFound(path)
 
diff --git a/ooni/oonicli.py b/ooni/oonicli.py
index 5c3c0ce..9d50e44 100644
--- a/ooni/oonicli.py
+++ b/ooni/oonicli.py
@@ -152,7 +152,7 @@ def runWithDirector(logging=True, start_tor=True):
             deck.loadDeck(global_options['testdeck'])
         else:
             log.debug("No test deck detected")
-            test_file = nettest_to_path(global_options['test_file'])
+            test_file = nettest_to_path(global_options['test_file'], True)
             net_test_loader = NetTestLoader(global_options['subargs'],
                     test_file=test_file)
             deck.insert(net_test_loader)





More information about the tor-commits mailing list