CVE-2008-3909
NoneCVSS
—
EPSS
0.9%
Published
Sep 4, 2008
CISA due date
—
Cloudanix analysis
A flaw in older versions of a common web framework could allow an attacker to trick an administrator into unknowingly deleting or changing important data.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Moderate
- Impact
- Data Tampering
- Component
- Web Framework
- Class
- CSRF
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
The Django administration application incorrectly stores unauthenticated HTTP POST requests in a user's session. When the user subsequently authenticates, the application processes these stored requests with the user's newly acquired administrative privileges. This allows an attacker to 'pre-load' a malicious action that will execute as soon as a legitimate administrator logs in, bypassing standard CSRF defenses that rely on checking tokens for authenticated sessions.
Why it matters to the business
An attacker can exploit this flaw to trick an administrator into performing unintended actions, such as deleting critical data, modifying application settings, or altering user accounts. This can lead to data loss, service disruption, and unauthorized changes to business-critical information managed through the Django admin interface, potentially causing significant operational and reputational damage.
How an attack unfolds
An attacker first crafts a malicious webpage containing a hidden form. This form is configured to automatically submit a POST request to a sensitive endpoint in the target Django admin panel, for example, a request to delete a user. The attacker then tricks a victim with administrative privileges on the Django site into visiting this malicious page, perhaps through a phishing email. The victim's browser sends the POST request, but since they are not logged in, the vulnerable Django application queues the request. Later, when the administrator logs into the application legitimately in the same browser session, Django processes the queued request, causing the malicious action to be executed with the administrator's permissions.
How to fix it
The affected versions of Django (0.91, 0.95, 0.96) are critically outdated and unsupported. The only effective remediation is to upgrade the application to a currently supported version of Django. Modern Django versions include comprehensive, built-in protections against Cross-Site Request Forgery (CSRF) that prevent this type of attack by default. Given the extreme age of the vulnerable versions, a full migration to a modern, supported framework is essential for overall security.
How to confirm the fix worked
To validate the fix, confirm that the application is no longer running the vulnerable Django versions (0.91, 0.95, 0.96) by checking the project's dependencies (e.g., requirements.txt or similar). Additionally, you can verify that the application's admin panel correctly implements CSRF protection by attempting to submit a POST request to an administrative endpoint without a valid CSRF token; the request should be rejected, typically with an HTTP 403 Forbidden error.
Typical attack path
- An attacker identifies a target application running a vulnerable version of Django (0.91, 0.95, or 0.96).
- The attacker crafts a malicious webpage designed to send a POST request to a sensitive function within the Django admin panel (e.g., deleting data).
- The attacker uses social engineering, such as a phishing email, to lure a privileged administrator into visiting the malicious page.
- The victim's browser sends the crafted POST request to the vulnerable application, which queues the request because the user is not yet authenticated.
- The victim subsequently navigates to the real admin panel and logs in.
- Upon successful authentication, the Django application processes the queued request, executing the attacker's malicious action with the victim's administrative privileges.
How to detect it
To detect potential historical exploitation, security teams should analyze web server and application logs. Look for a sequence of events where a POST request to an administrative URL from a specific IP address is recorded, which is not immediately successful (e.g., results in a redirect or error), but is followed shortly by a successful login event from the same IP address. Correlate these events with any unexpected or unauthorized actions recorded in application audit logs that occurred immediately after an administrator's login.
What your security team should do
- Immediately identify all applications using the Django framework and determine their versions. Prioritize any systems found running these ancient versions.
- For any application running a vulnerable version, create a plan for immediate upgrade to a supported Django release. These versions are over a decade old and likely contain numerous other critical vulnerabilities.
- Review web server logs for suspicious POST requests to admin endpoints that were followed by a successful login from the same source, which could indicate past exploitation attempts.
The record
The administration application in Django 0.91, 0.95, and 0.96 stores unauthenticated HTTP POST requests and processes them after successful authentication occurs, which allows remote attackers to conduct cross-site request forgery (CSRF) attacks and delete or modify data via unspecified requests.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | django | 0 | 1.1 |
| PyPI | django | 0.91.0 | 0.91.3 |
| PyPI | django | 0.95.0 | 0.95.4 |
| PyPI | django | 0.96.0 | 0.96.3 |
| Debian:11 | python-django | 0 | 1.0-1 |
| Debian:12 | python-django | 0 | 1.0-1 |
| Debian:13 | python-django | 0 | 1.0-1 |
| Debian:4.0 | python-django | 0 | 0.95.1-1etch2 |
| pypi | Django | 0.91.0 | No fix |
| pypi | Django | 0.95.0 | No fix |
| pypi | Django | 0.96.0 | No fix |
Related vulnerabilities
- GHSA-8p8v-wh79-9r56 Django vulnerable to Uncontrolled Resource Consumption Also affects django
- GHSA-mjgh-79qc-68w3 Django has a Race Condition vulnerability Also affects django
- CVE-2026-25673 An issue was discovered in 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29. Also affects django
- CVE-2026-25674 An issue was discovered in 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29. Also affects django
- GHSA-6426-9fv3-65x8 Django has an SQL Injection issue Also affects django
- GHSA-gvg8-93h5-g6qq Django has an SQL Injection issue Also affects django
- GHSA-2mcm-79hx-8fxw Django has Observable Timing Discrepancy Also affects django
- GHSA-33mw-q7rj-mjwj Django has Inefficient Algorithmic Complexity Also affects django