~/home of geeks

Sicherheitslücken an der Wurzel packen

· 678 Wörter · 4 Minute(n) Lesedauer

Maven

In vielen Java Projekten werden Webservices nach außen, ins Internet, zur Verfügung gestellt. Sicherheitslücken in den verwendeten Bibliotheken können hierbei zum Risiko werden. Mit dem Maven-Plugin org.owasp.dependency-check-maven kann hier bereits beim Build vorgesorgt werden.

Gemeinnützige Sicherheit #

Das OWASP (Open Web Application Security Project™) ist ein gemeinnütziges Projekt, in dem Softwaresicherheit für alle zugänglich gemacht werden soll. Hierzu gehören Programme, welche Datenbanken mit bekannten Sicherheitslücken zur Analyse verwenden und Tools, um Software auf Schwachstellen zu prüfen.

Das dependency-check-maven Plugin verwendet das OWASP Dependency Check Werkzeug, welches wiederum mit der NVD (National Vulnerability Database) Datenbank von NIST arbeitet und alle Versionen der verwendeten und durch Abhängigkeiten geladenen Bibliotheken mit der Datenbank der bekannten Sicherheitslücken abgleicht und meldet, wenn Bibliotheken mit bekannten Lücken in Verwendung sind. Dabei wird, je nach Schwere der Lücken, ein Scoring (Schwellwert) erstellt, über den man z. B. den Buildprozess abbrechen lassen kann.

<build>
    <plugins>
        <plugin>
            <groupId>org.owasp</groupId>
            <artifactId>dependency-check-maven</artifactId>
            <version>4.0.2</version>
            <configuration>
                <cveValidForHours>12</cveValidForHours>
                <failBuildOnCVSS>4</failBuildOnCVSS>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
[INFO] --- dependency-check-maven:4.0.2:check (default) @ MyProject ---
[INFO] Central analyzer disabled
[INFO] Checking for updates
[INFO] starting getUpdatesNeeded() ...
[INFO] NVD CVE requires several updates; this could take a couple of minutes.
[INFO] Download Started for NVD CVE - 2011
[INFO] Download Started for NVD CVE - 2009
[INFO] Download Started for NVD CVE - 2002
...
[INFO] Download Started for NVD CVE - 2018
[INFO] Download Started for NVD CVE - 2019
[INFO] Processing Started for NVD CVE - 2003
[INFO] Processing Complete for NVD CVE - 2003  (593 ms)
[WARNING] Download Failed for NVD CVE - 2015
Some CVEs may not be reported.
[WARNING] Unable to update Cached Web DataSource, using local data instead. Results may not include recent vulnerabilities.
[INFO] Analysis Started
[INFO] Finished Archive Analyzer (0 seconds)
[INFO] Finished File Name Analyzer (0 seconds)
[INFO] Finished Jar Analyzer (0 seconds)
[INFO] Finished Dependency Merging Analyzer (0 seconds)
[INFO] Finished Version Filter Analyzer (0 seconds)
[INFO] Finished Hint Analyzer (0 seconds)
[INFO] Created CPE Index (0 seconds)
[INFO] Skipping CPE Analysis for npm
[INFO] Finished CPE Analyzer (0 seconds)
[INFO] Finished False Positive Analyzer (0 seconds)
[INFO] Finished NVD CVE Analyzer (0 seconds)
[INFO] Finished Vulnerability Suppression Analyzer (0 seconds)
[INFO] Finished Dependency Bundling Analyzer (0 seconds)
[INFO] Analysis Complete (1 seconds)
[WARNING] 

One or more dependencies were identified with known vulnerabilities in MyProject:

mysql-connector-java-5.1.47.jar (cpe:/a:oracle:mysql:5.1.47, cpe:/a:mysql:mysql:5.1.47, mysql:mysql-connector-java:5.1.47) : CVE-2018-0735
spring-aop-4.3.11.RELEASE.jar (cpe:/a:pivotal_software:spring_framework:4.3.11, org.springframework:spring-aop:4.3.11.RELEASE) : CVE-2018-1257, CVE-2018-11040, CVE-2018-15756

See the dependency-check report for more details.

Analyse der Lücken #

In dem Beispielprojekt sind also zwei Bibliotheken (mysql-connector-java und spring-aop), welche ein Sicherheitsrisiko darstellen. Jede bekannte Sicherheitslücke erhält dabei eine CVE-Nummer (Common Vulnerabilities and Exposures). Über diese kann man sich Details zu den Lücken holen, z. B. aus der NVD. Das Maven Plugin kann aber auch solche Details in einem HTML-Report verlinken, wenn es als Teil des Site-Plugins in Form eines Report eingebunden wird.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-site-plugin</artifactId>
    <version>3.7.1</version>
    <configuration>
        <reportPlugins>
            <plugin>
                <groupId>org.owasp</groupId>
                <artifactId>dependency-check-maven</artifactId>
                <version>4.0.2</version>
                <configuration>
                    <name>Dependency Check</name>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>aggregate</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </reportPlugins>
    </configuration>
</plugin>

Eine der Sicherheitslücken aus dem Spring-AOP Paket wird in der NVD als MEDIUM bewertet und als vom Typ “Input Validation” kategorisiert. Auch heißt es, dass der Fehler “STOMP over WebSocket”-Endpunkte betrifft, die man mit dem Spring Messaging Modul erstellt. In meiner Anwendung ist dies nicht der Fall, also ist dieser Bug für mich nicht ganz so kritisch.

Wichtig ist, dass die Datenbank gleichzeitig auflistet, welche Lösungsvorschläge es gibt. In diesem Fall ist es ein Link auf die Pivotal-Seite selbst, welche Spring herstellen. Pivotal ihrerseits schreibt

Users of affected versions should apply the following mitigation: 5.0.x users should upgrade to 5.0.6. 4.3.x users should upgrade to 4.3.17.

Die weiteren Schwachstellen, denn bei der verwendeten Spring-AOP Bibliothek scheint es mehrere zu geben (CVE-2018-11040, CVE-2018-15756), will ich hier erst mal nicht detailliert analysieren.

Für das Beispiel gilt es also, die Library mit einer neueren Version auszutauschen.