CVE-2024-32651: Changedetection.io Changedetection.io Has A Server Side Vulnerability
CRITICALCVE-2024-32651 is a CRITICAL (CVSS 10.0) changedetection.io has a server side vulnerability (CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine) affecting Changedetection.io libraries in the PyPI ecosystem. The issue involves changedetection.io has a server side template injection using jinja2 which allows remote command execution. Remediation is available by upgrading affected packages to version 0.45.21.
CVE-2024-32651 at a Glance
Security Impact
CVSS: 10.0
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H).
How to Fix CVE-2024-32651
To remediate this vulnerability, upgrade all affected Changedetection.io dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install changedetection.io>=0.45.21
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show changedetection.io
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2024-32651, inspect your installed packages using pip:
pip show changedetection.io
Analyze the terminal output to locate any version of Changedetection.io in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.45.21), your application is affected.
Note: The pip show changedetection.io command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine, where the product uses a template engine to insert or process externally-influenced input, but it does not neutralize or incorrectly neutralizes special elements or syntax that can be interpreted as template expressions or other code directives when processed by the engine. In Changedetection.io, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2024-32651 Affected Changedetection.io Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
changedetection.io
|
PyPI |
< 0.45.21
|
0.45.21
|
References
Frequently Asked Questions
What is CVE-2024-32651?
Which Changedetection.io versions are affected?
What version fixes CVE-2024-32651?
Is changedetection.io affected?
What is the CVSS score of CVE-2024-32651?
What CWE is associated with CVE-2024-32651?
How can I check PyPI dependencies for CVE-2024-32651?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-4r7v-whpg-8rx3",
"modified" : "2025-08-06T17:55:27Z",
"published" : "2024-10-15T18:05:15Z",
"aliases" : [ "CVE-2024-32651" ],
"summary" : "changedetection.io has a Server Side Template Injection using Jinja2 which allows Remote Command Execution",
"details" : "### Summary\nA Server Side Template Injection in changedetection.io caused by usage of unsafe functions of Jinja2 allows Remote Command Execution on the server host.\n\n### Details\n\nchangedetection.io version: 0.45.20\n```\ndocker images\nREPOSITORY TAG IMAGE ID CREATED SIZE\ndgtlmoon/changedetection.io latest 53529c2e69f1 44 hours ago 423MB\n```\n\nThe vulnerability is caused by the usage of vulnerable functions of Jinja2 template engine.\n```python\nfrom jinja2 import Environment, BaseLoader\n...\n # Get the notification body from datastore\n jinja2_env = Environment(loader=BaseLoader)\n n_body = jinja2_env.from_string(n_object.get('notification_body', '')).render(**notification_parameters)\n n_title = jinja2_env.from_string(n_object.get('notification_title', '')).render(**notification_parameters)\n```\n\n\n### PoC\n1. Create/Edit a URL watch item\n2. Under *Notifications* tab insert this payload: \n```python\n{{ self.__init__.__globals__.__builtins__.__import__('os').popen('id').read() }}\n```\n\n\n3. See Telegram (or other supported messaging app) notification\n\n\n\n\n### Impact\nIn the PoC I've used `id` as payload and Telegram to read the result. \nAttackers can run any system command without any restriction and they don't need to read the result in the notification app (e.g. they could use a reverse shell).\nThe impact is critical as the attacker can completely takeover the server host.\nThis can be reduced if changedetection access is protected by login page with a password, but this isn't required by the application (not by default and not enforced).\n\n### References\n- https://www.hacktivesecurity.com/blog/2024/05/08/cve-2024-32651-server-side-template-injection-changedetection-io/\n- https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection/jinja2-ssti\n- https://www.onsecurity.io/blog/server-side-template-injection-with-jinja2/\n- https://docs.cobalt.io/bestpractices/prevent-ssti/\n\n### Credits\n\nEdoardo Ottavianelli",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "changedetection.io"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "0.45.21"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 0.45.20"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/dgtlmoon/changedetection.io/security/advisories/GHSA-4r7v-whpg-8rx3"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2024-32651"
}, {
"type" : "WEB",
"url" : "https://blog.hacktivesecurity.com/index.php/2024/05/08/cve-2024-32651-server-side-template-injection-changedetection-io"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/dgtlmoon/changedetection.io"
}, {
"type" : "WEB",
"url" : "https://github.com/dgtlmoon/changedetection.io/releases/tag/0.45.21"
}, {
"type" : "WEB",
"url" : "https://www.onsecurity.io/blog/server-side-template-injection-with-jinja2"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-1336" ],
"severity" : "CRITICAL",
"github_reviewed" : true,
"github_reviewed_at" : "2024-10-15T18:05:15Z",
"nvd_published_at" : "2024-04-26T00:15:08Z"
}
}