Skip to main content
84% of Sites Still Running Vulnerable jQueryIncident
4 min readFor Security Engineers

84% of Sites Still Running Vulnerable jQuery

Overview of the Issue

In August 2019, W3Techs scanned websites and found jQuery running on 73% of them. Snyk's security research revealed that 83.4% of those jQuery installations used the 1.x release branch — versions containing known Cross-Site Scripting (XSS) vulnerabilities. This means 84% of all scanned websites were serving exploitable code to their users.

This is not an isolated incident but a systemic issue: organizations implement jQuery once, build features on top of it for years, and neglect to update the foundation. The library functions, tests pass, and the backlog fills with other tasks. Meanwhile, four medium-severity XSS vulnerabilities remain in production, unnoticed.

Timeline of Vulnerabilities

The timeline spans several years:

2006-2016: jQuery 1.x releases become the standard for DOM manipulation and AJAX. Organizations build numerous components dependent on specific jQuery behaviors.

2016-2019: Snyk tracks six security vulnerabilities in jQuery, including four XSS flaws in the 1.x branch. Patches are released, but most organizations do not apply them.

August 2019: W3Techs data shows 73% of websites still use jQuery, with 83.4% running vulnerable 1.x versions. This results in 84% of sites being exploitable.

Present day: Many installations remain unchanged, with vulnerabilities still present.

Missing Controls

Dependency Inventory: Organizations failed to maintain a complete list of third-party libraries in production. Without knowing what's running, patching is impossible. Even when jQuery's presence was known, teams often couldn't specify the version without checking production directly.

Vulnerability Scanning: Software Composition Analysis (SCA) tools were available but often treated as optional. Without automated scanning in the CI/CD pipeline, vulnerable dependencies went unnoticed in production.

Patch Management Process: Teams lacked a defined process for evaluating, testing, and deploying updates. "Update jQuery" remained in the backlog, hindered by fears of breaking existing functionality.

Change Control: jQuery was treated as infrastructure — set up once and forgotten. No recurring reviews were scheduled, and no one questioned if the version was outdated.

Testing Coverage: Teams couldn't update jQuery confidently due to inadequate test suites. Without automated tests covering jQuery-dependent behaviors, every update was risky.

Relevant Standards

PCI DSS v4.0.1, Requirement 6.3.2: Organizations must maintain an inventory of bespoke and custom software and third-party components. If you process payment card data and can't list your jQuery version, you're non-compliant.

PCI DSS v4.0.1, Requirement 6.3.3: Security vulnerabilities in custom and third-party software components must be identified and addressed. This includes documented risk assessments and remediation plans for vulnerabilities like those in jQuery 1.x.

OWASP Top 10 (2021), A06:2021 – Vulnerable and Outdated Components: Using components with known vulnerabilities is a significant risk. OWASP highlights the danger of not knowing the versions of all components used.

OWASP ASVS v4.0.3, V14.2.3: Verification is required to ensure all unnecessary features and configurations are removed. If jQuery features are unused, the library becomes unnecessary attack surface.

ISO/IEC 27001:2022, Annex A.8.8: Technical vulnerability management requires timely information about vulnerabilities, evaluation of exposure, and appropriate measures. Running jQuery 1.x for years after patches violates this control.

Action Items for Your Team

Implement Automated Dependency Scanning: Add an SCA tool to your CI/CD pipeline. Tools like Snyk, OWASP Dependency-Check, or GitHub's Dependabot can help. Configure it to fail builds when high or critical vulnerabilities appear in dependencies.

Create a Dependency Inventory: List every third-party library in every application, including version numbers, last update date, and owning team. Store this in a searchable format and update it monthly.

Define Your Patch SLA: Decide how quickly you'll address vulnerabilities by severity. Document exceptions, but ensure they are visible to leadership.

Build a jQuery Migration Plan: If you're still running jQuery 1.x, schedule the upgrade. Test on a staging environment first and identify breaking changes. For new projects, consider if jQuery is necessary, as modern browsers support most patterns natively.

Expand Test Coverage: Start with critical user paths and add integration tests for jQuery-dependent interactions. This helps identify breaking changes during updates.

Schedule Recurring Dependency Reviews: Quarterly, review your dependency list. Check for newer versions and disclosed vulnerabilities. Make this a calendar event with assigned owners.

Track Dependency Age as a Metric: Measure the time between a dependency's latest release and your production version. If the gap exceeds six months, investigate. Old dependencies become technical debt.

The jQuery situation is a preview of what can happen with any dependency. React, Angular, Vue, Bootstrap, Lodash — all will face similar issues. Ensure you have controls in place to respond effectively.

Topics:Incident

You Might Also Like