Security overview of Plone

December 22, 2008 by powered-by.org · Leave a Comment
Filed under: Plone Basics 

The ten most common in web applications, and how addresses them.

Below is a list of the 10 most common vulnerabilities in web applications, and how addresses these. The full background for this list can be found at the Open Web Application Security Project web site.

Problem A1: Unvalidated Input
How handles this: All input in is validated, and the framework makes sure you can never input data that is not of the required type. This is probably the number one reason why sites — even when deployed and developed by people new to web — are not compromised.
Problem A2: Broken Access Control
How handles this: is based on the well-proven (7 years in production), flexible and granular ACL/roles-based model of Zope. In addition, utilizes an innovative workflow approach to , which means that end-users never see or modify the settings — they only work with presets that have been supplied to them by the developers of the application. This makes the potential for errors orders of magnitude less likely to happen.
Problem A3: Broken Authentication and Session Management
How handles this: authenticates users in its own database using a SHA-1 hash of their password. Using its modular authentication system can also authenticate users against common authentication systems such as LDAP and SQL as well as any other system for which a plugin is available (Gmail, OpenID, etc.). After authentication, creates a session using a SHA-1 hash of a secret stored on the server and the userid (HMAC-SHA-1). Secrets can be refreshed on a regular basis to add extra where needed. Note: Older versions (i.e. before 3) use a less secure method where a session cookie containing both the loginname and password for a user are used. It is highly recommended to enforce use of HTTPS encryption for such sites.
Problem A4: Cross Site Scripting
How handles this: has strong filtering in place to make sure that no potentially malicious code can ever be entered into the system. All content that is inserted is stripped of malicious tags like <script>, <embed> and <object>, as well as removing all <form> related tags, stopping users from impersonating any kind of HTTP POST requests. All destructive operations (like deletion of content) and privilege elevation (roles, permissions) are checked to be valid HTTP POST request in addition to the usual checking. On an infrastructure level, the template language used to create pages in quotes all HTML by default, effectively preventing cross site scripting.
Problem A5: Buffer Overflow
How handles this: Buffers overflow vulnerabilities are not known to exist in the current versions of Python, and is usually more common in systems based on languages that do not have strict checking for this, like C.
Problem A6: Injection Flaws
How handles this: This is usually common in systems that use SQL for its content storage. does not use SQL by default, and when setting up SQL databases with , they always communicate through a standard SQL connector that neutralizes injection attempts automatically.
Problem A7: Improper Error Handling
How handles this: provides almost information on the front end (no stack traces etc) when there is an error, but logs the error internally instead. All the front-end user will see is the log entry number of the error that was caused, allowing the error to be located in the logs if it is reported to the site admin.
Problem A8: Insecure Storage
How handles this: All the cryptographic methods in use in the stack are been exposed to public scrutiny for years, and have no known vulnerabilities.
Problem A9: Application Denial of Service
How handles this: The most common setup for a site is to utilize a caching proxy like Squid, Varnish, Apache or IIS. When configured in this way, it’s very hard to bring down a site with DoS attacks. (Note: In versions earlier than 2.1.4 and 2.5.1, there was a potential Denial of Service attack identified in the error page of , which was unnecessarily heavy. This was fixed as part of a bigger audit performed in the same timeframe, and the current releases of do not suffer from this problem.
A10 Insecure Configuration Management
How handles this: has very strict defaults out-of-the-box, and also runs as an unprivileged user on the server. Web users do not have access to the file system. Because of these factors, the most common configuration vulnerabilities in this area are avoided.

track record

Measuring or quantifying risks in is hard — is a process, not a product, and thus requires constant vigilance and good coding practices combined with reviews. One interesting measure is the number of vulnerabilities reported by the MITRE’s Common Vulnerabilities and Exposures database, which is the main source for tracking and naming .

Here are some counts of the numbers of known vulnerabilities and exposures in some common CMS platforms and their technology stacks – also note that the Python/Zope/ stack has existed for several years longer than the others mentioned:

  • /Zope/Python stack:
    • CVE Entries containing : 3
    • CVE Entries containing Zope: 15 (only 3 since 2004)
    • CVE Entries containing Python: 17
  • PHP-based stacks:
    • CVE Entries containing : 22
    • CVE Entries containing Mambo: 31
    • CVE Entries containing : 20
    • CVE Entries containing MySQL: 99
    • CVE Entries containing PHP: 1258
  • Other stacks:
    • CVE Entries containing Perl: 97

These numbers do not prove anything by themselves, of course — but do suggest a general trend, and are a good approximation of our track record compared to other systems.

Related posts

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!