Path Traversal in Loopback with Hmac Signatures
Path Traversal in Loopback with Hmac Signatures — how this specific combination creates or exposes the vulnerability
Path Traversal occurs when an attacker manipulates file paths to access resources outside the intended directory, such as ../../../etc/passwd. In Loopback applications that rely on Hmac Signatures for request authentication, a common misconfiguration can weaken the protection intended by Hmac and expose traversal risks.
Hmac Signatures typically bind critical request properties—method, URL, selected headers, and a timestamp—into a signed string that the server verifies before processing. If the canonical string used for signing includes a raw, user-supplied path that is later used to locate files, an attacker can provide a malicious path like /files/../../../secret.txt while the signature still validates. The server may verify the Hmac successfully (because the attacker did not need to know the secret) but then pass the untrusted path directly to file system operations, bypassing intended directory restrictions.
This combination is particularly dangerous when the application uses the signed path for authorization decisions or file reads without normalization and strict allowlisting. For example, an API endpoint that signs the requested resource path and later opens that path on disk can be tricked into reading arbitrary files if path segments such as .. are not rejected before filesystem resolution. MiddleBrick detects such mismatches by correlating the runtime request path used for file operations with the signed canonical input, highlighting where signature coverage does not match the actual data used in potentially unsafe operations.
Moreover, if Hmac verification does not include the full effective path or does not enforce a strict base path, an attacker can pivot through parent directories while the signature remains valid. The vulnerability is not in Hmac itself, but in how the application integrates signed metadata with filesystem access patterns. MiddleBrick’s checks include examining whether the canonical signed data covers the resolved path, whether directory traversal sequences are stripped or rejected, and whether file access respects a confined document root.
Hmac Signatures-Specific Remediation in Loopback — concrete code fixes
To remediate Path Traversal when using Hmac Signatures in Loopback, ensure that paths are validated, normalized, and restricted before being used in filesystem operations, and that the signed canonical data reflects the intended, constrained scope.
First, normalize incoming paths and reject any that attempt to traverse outside the allowed directory. Use a strict base directory and resolve paths with built-in utilities that prevent escaping. For example:
const path = require('path');
const allowedBase = path.resolve(__dirname, 'public/uploads');
function resolveSafePath(userPath) {
const normalized = path.normalize(userPath).replace(/^(\/|\.\.)/, '');
const target = path.resolve(allowedBase, normalized);
if (!target.startsWith(allowedBase)) {
throw new Error('Path traversal attempt');
}
return target;
}
Second, include the resolved, safe path (or a stable resource identifier) in the Hmac canonical string instead of the raw user input. This binds the signature to the actual operation performed. Example canonical construction in Loopback style:
function buildHmacPayload(req) {
const safePath = resolveSafePath(req.query.file || '');
const timestamp = Math.floor(Date.now() / 1000).toString();
const parts = [
'POST',
'/api/files/read',
timestamp,
safePath
];
return {
canonical: parts.join('\n'),
timestamp,
path: safePath
};
}
Verify the Hmac over the canonical string that uses the safe path, and only after verification perform file access using the resolved path. This ensures that even if the client sends a malicious path, the signature will not match unless the server derives the canonical path the same way. MiddleBrick’s findings can highlight when the canonical data and runtime path diverge, guiding you to align them.
Finally, enforce strict allowlisting of file extensions and content types where applicable, and avoid using user-controlled values directly in filesystem APIs. Combine these practices with Loopback’s built-in validation rules to further reduce risk. MiddleBrick’s continuous checks can monitor these controls in deployed services, especially under the Pro plan’s ongoing monitoring and in CI/CD pipelines via the GitHub Action to prevent regressions before deployment.
Related CWEs: inputValidation
| CWE ID | Name | Severity |
|---|---|---|
| CWE-20 | Improper Input Validation | HIGH |
| CWE-22 | Path Traversal | HIGH |
| CWE-74 | Injection | CRITICAL |
| CWE-77 | Command Injection | CRITICAL |
| CWE-78 | OS Command Injection | CRITICAL |
| CWE-79 | Cross-site Scripting (XSS) | HIGH |
| CWE-89 | SQL Injection | CRITICAL |
| CWE-90 | LDAP Injection | HIGH |
| CWE-91 | XML Injection | HIGH |
| CWE-94 | Code Injection | CRITICAL |