Overview
This vulnerability occurs when an application downloads or includes code from an external source (like a CDN, third-party repository, or update server) without verifying its integrity. If the external source is compromised, or if an attacker can perform a Man-in-the-Middle (MitM) attack, they can substitute the legitimate code with a malicious version. The application, trusting the source, then executes the malicious code, leading to attacks like Cross-Site Scripting (XSS), data theft, or complete system compromise. 🌐📥➡️😈Business Impact
Failure to check code integrity can lead to severe supply chain attacks:- Client-Side Attacks (XSS): If a CDN-hosted JavaScript library is compromised, the attacker’s script runs on every user’s browser, potentially stealing credentials, session cookies, or PII.
- Server-Side Attacks (RCE): If a server-side auto-update mechanism or remote file include downloads and executes malicious code, the attacker can gain full control of the server.
- Loss of Trust: Users and customers trust that the application’s code is legitimate. A breach originating from a compromised dependency erodes this trust.
Reference Details
CWE ID: CWE-494
Related CWEs: CWE-829 (Untrusted Control Sphere), CWE-345 (Data Authenticity)
OWASP Top 10 (2021): A08:2021 - Software and Data Integrity Failures
Severity: High to Critical
Framework-Specific Analysis and Remediation
This vulnerability manifests in two primary ways:- Client-Side (Frontend): Including scripts or stylesheets from CDNs without using Subresource Integrity (SRI).
- Server-Side (Backend): Implementing insecure auto-update features, or dynamically
include/require-ing code from remote URLs (e.g., common in PHP).
- Client-Side: Always use the
integrityattribute (with a SHA hash) in<script>and<link>tags when loading resources from external CDNs. - Server-Side: Do not include/execute code from remote URLs. If auto-updates are necessary, download packages over HTTPS, verify their digital signatures (e.g., GPG, RSA) against a trusted public key, and check file hashes against a secure manifest.
- Python
- Java
- .NET(C#)
- PHP
- Node.js
- Ruby
Framework Context
This is less common in Python frameworks themselves but can occur in deployment scripts or custom application logic that fetches resources. The primary risk is often client-side (in Django/Flask templates).Vulnerable Scenario 1: Missing Subresource Integrity (SRI) in Template
Vulnerable Scenario 2: Insecure Server-Side Update Check
A custom admin utility to “check for updates” downloads and runs a script.Mitigation and Best Practices
- Templates: Add the
integrityandcrossoriginattributes to all<script>and<link rel="stylesheet">tags loading from external CDNs. - Server-Side: Download updates over HTTPS. Validate signatures using a trusted public key (e.g., using
gnupgorcryptographylibraries) and check SHA hashes against a manifest file (also downloaded securely). Do not useexec()on untrusted code.
Secure Code Example
Testing Strategy
Scan HTML templates for<script src="..."> and <link rel="stylesheet" href="..."> tags loading from external domains. Ensure they have integrity and crossorigin attributes. Review server-side code for file downloads (requests.get, urllib.request) followed by execution (exec, os.system, subprocess) or loading (pickle.load). Verify signatures and hash checks are performed on downloaded code/packages.
