Germany/Projekte/Top 10 fuer Entwickler-2013/A9-Benutzen von Komponenten mit bekannten Schwachstellen

Some vulnerable components (e.g., framework libraries) can be identified and exploited with automated tools, expanding the threat agent pool beyond targeted attackers to include chaotic actors. Attacker identifies a weak component through scanning or manual analysis. They customize the exploit as needed and execute the attack. It gets more difficult if the used component is deep in the application. Virtually every application has these issues because most development teams don’t focus on ensuring their components stay up to date. In many cases, the developers don’t even know all the components they are using, never mind their versions. Component dependencies make things even worse. The full range of weaknesses is possible, including injection, broken access control, XSS, etc. The impact could be minimal, up to complete host takeover and data compromise. Consider what each vulnerability might mean for the business controlled by the affected application. It could be trivial or it could mean complete compromise.

Component vulnerabilities can cause almost any type of risk imaginable, from the trivial to sophisticated malware designed to target a specific organization. Components almost always run with the full privilege of the application, so flaws in any component can be serious, The following two vulnerable components were downloaded 22m times in 2011.


 * Apache CXF Authentication Bypass – By failing to provide an identity token, attackers could invoke any web service with full permission.
 * Spring Remote Code Execution– Abuse of the Expression Language implementation in Spring allowed attackers to execute arbitrary code, effectively taking over the server.

Every application using either of these vulnerable libraries is vulnerable to attack as both of these components are directly accessible by application users. Other vulnerable libraries, used deeper in an application, may be harder to exploit.

One option is not to use components that you didn’t write. But realistically, the best way to deal with this risk is to ensure that you keep your components up-to-date. Many open source projects (and other component sources) do not create vulnerability patches for old versions. Instead, most simply fix the problem in the next version. Software projects should have a process in place to:
 * 1) Identify the components and their versions you are using, including all dependencies. (e.g., the versions plugin).
 * 2) Monitor the security of these components in public databases, project mailing lists, and security mailing lists, and keep them up-to-date.
 * 3) Establish security policies governing component use, such as requiring certain software development practices, passing security tests, and acceptable licenses.

= JAVA =

Erkennen aller verwendeten Software-Komponenten
Verschaffen Sie sich einen Überblick über alle, vom Programm benutzten Software-Komponenten, deren Abhängigkeiten (rekursive Abfrage der benutzten Komponenten), sowie den Versionsständen. Beispiele für Tools, die Sie dabei unterstützen:
 * OWASP Dependency Check
 * Versions-Plugin für Maven
 * weitere kommerzielle Produkte: vgl Top10-Mail-Liste

Sicherheits-(CERT-)Meldungen für die verwendeten Versionen prüfen
Um herauszufinden, ob diese Versionen von Schwachstellen betroffen sind, ist es notwendig, die oben genannten Schwachstellen-Datenbanken regelmäßig, in kurzen Abständen zu durchsuchen, sowie sich mithilfe von Mailing-Listen und weiteren Meldungen zeitnah über mögliche Lücken zu informieren.

Am einfachsten geht dies mithilfe von Tools: Falls eine benutzte Komponente verwundbar ist, sollten Sie genau prüfen, ob Ihre Anwendung verwundbare Teile der Komponente nutzt und ob der Fehler Auswirkungen hat, um die Sie sich kümmern müssen. Verwenden des OWASP-Plugins im Maven-Build (pom.xml):
 * OWASP Dependency Check


 * org.owasp
 * dependency-check-maven
 * RELEASE
 * org.owasp
 * dependency-check-maven
 * RELEASE

Anmerkung: Theoretisch sollte es einfach sein, herauszufinden, ob die Anwendung verwundbare Komponenten, oder Bibliotheken benutzt. Leider enthalten Berichte über Sicherheitslücken kommerzieller oder von Open-Source-Software nicht immer automatisch auswertbare, exakte Versions-Angaben der verwundbaren Komponenten. Ferner benutzen nicht alle Bibliotheken ein verständliches Versionsnummerierungs-Schema. Darüber hinaus werden nicht alle Schwachstellen an zentrale Schwachstellen-Datenbanken, wie CVE und NVD gemeldet.

Entwickeln Sie Ihre Richtlinien zum Einsatz von Software-Komponenten
Um die Anzahl der, zu prüfenden Software-Komponenten und deren Versionen handhabbar zu halten, empfiehlt es sich, eine eigene Richtlinie dazu zu erstellen und durchzusetzen. Im Idealfall stellen Sie Ihren Entwicklern für bestimmte Aufgaben freigegebene Software-Komponenten (z.B. Bibliotheken) zur Verfügung.


 * OWASP Dependency Check
 * OWASP Good Component Practices Project


 * Versions-Plugin für Maven
 * The Unfortunate Reality of Insecure Libraries
 * Open Source Software Security
 * Addressing Security Concerns in Open Source Components
 * MITRE Common Vulnerabilities and Exposures

= PHP =

Tbd
tbd '''tbd

Tbd
'''tbd
 * '''tbd
 * '''tbd

Tbd
'''tbd
 * '''tbd
 * '''tbd


 * tbd !!


 * tbd!!

= .NET =

Tbd
tbd '''tbd

Tbd
'''tbd
 * '''tbd
 * '''tbd

Tbd
'''tbd
 * '''tbd
 * '''tbd


 * tbd !!


 * tbd!!

= Test =

tbd Text

tbd Text

tbd (ganze Breite) Text

Text

Text