Dependency Check
Dependency Check
– @ctxt / [email protected]
What are we going to talk about?
• Why should we care?
• Patching programs
• What application teams can do
• Deep dive into dependency-check
• Usage scenarios
• Governance
Why should we care?
• CVE-2016-5000 - Apache POI Information Disclosure via
External Entity Expansion (XXE)
• CVE-2016-4216 - Adobe XMP Toolkit for Java Information
Disclosure via External Entity Expansion (XXE)
• CVE-2016-3081 - Remote code execution vulnerability in
Apache Struts when dynamic method invocation is enabled
• CVE-2015-8103 - Remote code execution vulnerability in
Jenkins remoting; related to the Apache commons-collections
Black Duck - Open Source Security Analysis
• The State of Open Source Security in Commercial Applications
– https://
info.blackducksoftware.com/rs/872-OLS-526/images/OSSAReportFIN
AL.pdf
• 95% of applications include open source
• 67% of applications contained open source vulnerabilities
• Average age of open source vulnerability identified: 1,894 days
OWASP Top 10 2013
• Most critical web application risks
• A9 – Using components with known vulnerabilities
– Prevalence: Widespread
– Detectability: Difficult
• Difficult for 4 reasons
– Awareness
– Visibility
– Lack of tooling in 2012/2013
Patching Programs
• Generally do not cover application dependencies
– Lack of awareness of 3rd party or FOSS application dependencies
– Patching teams cannot push patches
• Patching application dependencies requires
– Possible code changes
– Full regression testing
Enter OWASP dependency-check
• Project stated December 2011 (first published in 2012)
• Performs Software Composition Analysis
– Reports known vulnerabilities
• Easy solution to the OWASP 2013 Top 10 A9 Using components
with known vulnerabilities
• Works as:
– Maven Plugin – Jenkins Plugin – Ant Task
– Gradle Plugin – SBT Plugin – Command Line
Language/Technology Support
• Fully supported: Java & .NET
• Experimental Analyzers:
– CocoaPods
– Swift Package Manager
– Python
– PHP (composer)
– Node.js
– Ruby
OWASP dependency-check
• False Negatives
– If key elements are not included in the dependency (e.g. jar, dll) the
library will not be identified and may result in un-reported risk
Dealing with False Positives
• Invalid dependency identification can be resolved using a
suppression file:
<suppress>
<notes><![CDATA[
This suppresses false positives identified on spring security.
]]></notes>
<gav regex="true">org\.springframework\.security:spring.*</gav>
<cpe>cpe:/a:mod_security:mod_security</cpe>
<cpe>cpe:/a:springsource:spring_framework</cpe>
<cpe>cpe:/a:vmware:springsource_spring_framework</cpe>
</suppress>
OWASP dependency-check
USING DEPENDENCY-CHECK
Onboarding an Application
• Basic steps
– Configure plugin
• Proxy configuration
– Run initial scan
– Create and configure a suppression file (if needed)
– Plan the upgrade for identified vulnerable components
OWASP dependency-check
DEMO
Use Cases for dependency-check
• Prove the existence of the problem
QUESTIONS?
More Information
• OWASP dependency-check
– http://jeremylong.github.io/DependencyCheck/
• OWASP dependency-track
– https://github.com/stevespringett/dependency-track
• OWASP dependency-check-sonar-plugin
– https://github.com/stevespringett/dependency-check-sonar-plugin
More Information
• Related Projects
– Ruby Bundler-Audit
– Retire.js
– Node Security Project