[mod_python] Mod_python Security

James Paige jamesp at westcoastaerospace.com
Thu Mar 2 16:54:43 EST 2006


These security hints are good stuff to have all in one place. I have 
edited together a list based on this thread and posted it on the 
mod_python FAQ at http://www.modpython.org/FAQ/faqw.py?req=all#3.28

---
James Paige

Graham Dumpleton wrote:
> Another one, an important one at that.
> 
> 7. Be aware that a security hole was found in mod_python. Unfortunately,
> I can't seem to find the proper security advisory for it on mod_python
> site. Only reference seems to be:
> 
>   http://www.modpython.org/3.1.4.html
> 
> I could be blind, but I would have thought it would have been important
> to keep the notice on the main page.
> 
> If using 2.X stream, ensure you are using 2.7.11 or make sure your
> distribution has patched 2.7.10 if that is what they are using.
> 
> If using 3.X stream. ensure you are using 3.1.4 or make sure your
> distribution has patched 3.0.X or 3.1.3 if that is what they are using.
> 
> Graham
>   
> Graham Dumpleton wrote ..
>> Some more.
>>
>> 1. If using mod_python.psp and you have PythonDebug enabled
>> the source code for your PSP pages can be visible by virtue of
>> putting an underscore on the end of the extension. Eg. ".psp_".
>>
>> It is thus a good idea not to have PyhthonDebug enabled for production
>> and/or public web site if using mod_python.psp. If you really need
>> PythonDebug to be on, only enable it for requests coming from
>> you own client machine in some way.
>>
>> 2. If Apache has write access to directories, it can drop ".pyc" files
>> into the directories for modules loaded. This extension isn't generally
>> protected and people can download the ".pyc" files and potentially
>> work out what your code is. Use something like:
>>
>>    <Files *.pyc>
>>    deny from all
>>    </Files>
>>
>> Depending on platform, may have to block access to ".pyo" files as
>> well.
>>
>> 3. PythonDebug in general can reveal stack traces to a client when
>> something goes wrong. In worst case, this may reveal secret information.
>>
>> 4. Try to avoid putting source code in actual directories visible to
>> Apache. Especially do not put sensitive information in such files.
>> The reason here is that it only takes one mistake in Apache  
>> configuration
>> and all your code would be visible.
>>
>> 5. If using an extension such as ".html" with AddHandler to map to
>> handler code in actual directory, ensure you block access to ".py"
>> extension if need be.
>>
>>    <Files *.py>
>>    deny from all
>>    </Files>
>>
>> 6. If writing a custom handler, if wanting to return apache.DECLINED,
>> make sure you understand what it does. Specifically, it will cause the
>> builtin default Apache handler to still run, which will serve up static
>> files. Like above, you may need to deny access to certain files as a
>> result.
>>
>> That is all I can think of for now. Sorry if some of it makes no sense,
>> am in a rush.
>>
>> Graham
>>
>> On 03/03/2006, at 12:54 AM, Nicolas Lehuen wrote:
>>
>>> There's an important rule :
>>>
>>> If you use the publisher, everything which is defined in a published
>>> module is generally accessible from the web, except if its name begins
>>> with an underscore.
>>>
>>> For example :
>>>
>>> # index.py
>>> # BAD !
>>> secret_password = "foobar"
>>>
>>> def index(req,password):
>>>     if password != secret_password:
>>>         return util.redirect(req,'/rejected.html')
>>>     else:
>>>         return "Welcome !"
>>>
>>> Your secret password in accessible through
>>> http://my_server/my_folder/index.py/secret_password
>>>
>>> To make sure it won't be accessed, rename secret_password to  
>>> _secret_password.
>>>
>>> There are exceptions to this "everything is accessible" rule, namely
>>> imported modules, new-styles classes and built-in functions cannot be
>>> traversed nor published. This prevents basic leaks like being able to
>>> call sys.exit() from any published module that imports sys. Those
>>> rules are specified in the lib/python/mod_python/publisher.py file, if
>>> you are curious.
>>>
>>> But in any case, be aware that any string defined in a published
>>> module is accessible unless its name is prefixed by an underscore,
>>> which includes your precious database password.
>>>
>>> Regards,
>>> Nicolas
>>>
>>> 2006/3/2, Mike Looijmans <nlv11281 at natlab.research.philips.com>:
>>>> As with any server-side scripting, there's:
>>>>
>>>> - Cross-site scripting
>>>> - Code injection
>>>> - SQL injection
>>>>
>>>> But that's typically 'your' fault...
>>>>
>>>> Mike Looijmans
>>>> Philips Natlab / Topic Automation
>>>>
>>>>
>>>> marinus van aswegen wrote:
>>>>> Hi
>>>>>
>>>>> I'd like to publish my page but I'm not sure what security issues
>>>>> mod_python typically face.
>>>>> Any recommendations?
>>>>>
>>>>>
>>>>> Regards
>>>>>
>>>>>
>>>>> --------------------------------------------------------------------
>>>>> ----
>>>>>
>>>>> _______________________________________________
>>>>> Mod_python mailing list
>>>>> Mod_python at modpython.org
>>>>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>>> _______________________________________________
>>>> Mod_python mailing list
>>>> Mod_python at modpython.org
>>>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>>>
>>> _______________________________________________
>>> Mod_python mailing list
>>> Mod_python at modpython.org
>>> http://mailman.modpython.org/mailman/listinfo/mod_python
>> _______________________________________________
>> Mod_python mailing list
>> Mod_python at modpython.org
>> http://mailman.modpython.org/mailman/listinfo/mod_python
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
> 



More information about the Mod_python mailing list