CVE-2024-32651: Changedetection.io Changedetection.io Has A Server Side Vulnerability

CRITICAL
Advisory Identifier: GHSA-4r7v-whpg-8rx3
CVSS 10.0
CWE-1336
Published
Advisory Summary

CVE-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

CVE Identifier CVE-2024-32651
GHSA Identifier GHSA-4r7v-whpg-8rx3
Severity CRITICAL
CVSS v3.1 Base Score 10.0
CWE Classification CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine
Affected Product Changedetection.io
Package Ecosystem PyPI
Published Date
Last Updated

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).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction None (UI:N)
Scope Changed (S:C)
Confidentiality High (C:H)
Integrity High (I:H)
Availability High (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.

changedetection.io fixed: 0.45.21
pip install changedetection.io>=0.45.21
Verify Direct and Transitive Dependencies

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

### Summary A Server Side Template Injection in changedetection.io caused by usage of unsafe functions of Jinja2 allows Remote Command Execution on the server host. ### Details changedetection.io version: 0.45.20 ``` docker images REPOSITORY TAG IMAGE ID CREATED SIZE dgtlmoon/changedetection.io latest 53529c2e69f1 44 hours ago 423MB ``` The vulnerability is caused by the usage of vulnerable functions of Jinja2 template engine. ```python from jinja2 import Environment, BaseLoader ... # Get the notification body from datastore jinja2_env = Environment(loader=BaseLoader) n_body = jinja2_env.from_string(n_object.get('notification_body', '')).render(**notification_parameters) n_title = jinja2_env.from_string(n_object.get('notification_title', '')).render(**notification_parameters) ``` ### PoC 1. Create/Edit a URL watch item 2. Under *Notifications* tab insert this payload: ```python {{ self.__init__.__globals__.__builtins__.__import__('os').popen('id').read() }} ``` ![Screenshot from 2024-04-19 15-46-04](https://github.com/dgtlmoon/changedetection.io/assets/35783570/b6a5779f-fd1e-4708-9b2d-21cb97f0bb4f) 3. See Telegram (or other supported messaging app) notification ![Screenshot from 2024-04-19 16-02-12](https://github.com/dgtlmoon/changedetection.io/assets/35783570/20877919-d6fe-49f1-bbd2-586e900207f1) ### Impact In the PoC I've used `id` as payload and Telegram to read the result. Attackers 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). The impact is critical as the attacker can completely takeover the server host. This 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). ### References - https://www.hacktivesecurity.com/blog/2024/05/08/cve-2024-32651-server-side-template-injection-changedetection-io/ - https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection/jinja2-ssti - https://www.onsecurity.io/blog/server-side-template-injection-with-jinja2/ - https://docs.cobalt.io/bestpractices/prevent-ssti/ ### Credits Edoardo Ottavianelli

CVE-2024-32651 Affected Changedetection.io Versions

1 component(s)
Fixed Versions:
0.45.21
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?
CVE-2024-32651 is a security vulnerability in Changedetection.io involving changedetection.io has a Server Side Template Injection using Jinja2 which allows Remote Command Execution under CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine.
Which Changedetection.io versions are affected?
Affected versions include releases prior to 0.45.21 across affected packages: changedetection.io.
What version fixes CVE-2024-32651?
Upgrading to 0.45.21 (or the latest patched release for your respective branch) resolves the vulnerability.
Is changedetection.io affected?
Yes, changedetection.io is affected in releases prior to 0.45.21. Upgrade your dependency to 0.45.21 or later.
What is the CVSS score of CVE-2024-32651?
CVE-2024-32651 has a CVSS v3.1 base score of 10.0 (CRITICAL) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H.
What CWE is associated with CVE-2024-32651?
CVE-2024-32651 is classified under CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine (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.).
How can I check PyPI dependencies for CVE-2024-32651?
Run the dependency tree command: 'pip show changedetection.io'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "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![Screenshot from 2024-04-19 15-46-04](https://github.com/dgtlmoon/changedetection.io/assets/35783570/b6a5779f-fd1e-4708-9b2d-21cb97f0bb4f)\n\n3. See Telegram (or other supported messaging app) notification\n\n![Screenshot from 2024-04-19 16-02-12](https://github.com/dgtlmoon/changedetection.io/assets/35783570/20877919-d6fe-49f1-bbd2-586e900207f1)\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"
  }
}