A demonstration Java application with intentional security vulnerabilities for CodeQL scanning.
This repository contains a simple Java application built with Maven that includes several common security vulnerabilities designed to be detected by GitHub's CodeQL static analysis tool.
- Main Application:
com.example.app.VulnerableApplication
- Entry point that demonstrates various vulnerabilities - Database Layer:
com.example.database.UserDatabase
- Contains SQL injection vulnerabilities - Security Utils:
com.example.security.CryptoUtils
- Contains weak cryptographic implementations - Web/File Handling:
com.example.web.FileController
- Contains path traversal and command injection vulnerabilities - LDAP Authentication:
com.example.ldap.LdapAuth
- Contains LDAP injection vulnerabilities
This application contains the following types of security vulnerabilities:
- SQL Injection - Direct string concatenation in SQL queries
- Command Injection - Unsanitized user input passed to system commands
- Path Traversal - File operations without path validation
- LDAP Injection - Unescaped user input in LDAP filters
- Weak Cryptography - Use of MD5 and weak random number generation
- Hard-coded Secrets - Embedded credentials and encryption keys
- Vulnerable Dependencies - Multiple packages with known vulnerabilities:
commons-collections:3.2.1
- Deserialization vulnerabilities (CVE-2015-7501), appears in multiple paths:- As a direct dependency
- As a transitive dependency through
commons-beanutils:1.9.2
- As a transitive dependency through
commons-digester:2.1
→commons-beanutils:1.8.3
commons-fileupload:1.3.1
- Arbitrary file upload vulnerabilities (CVE-2016-1000031)commons-codec:1.6
- Older version with potential vulnerabilitiescommons-dbcp:1.4
- Database connection pool with transitive dependencies- Additional transitive vulnerabilities through
commons-io:2.2
andcommons-pool:1.5.4
The repository includes a GitHub Actions workflow (.github/workflows/codeql-analysis.yml
) that:
- Runs CodeQL analysis on push and pull requests
- Uses the autobuild functionality for Java
- Includes security-and-quality queries for comprehensive coverage
- Runs weekly scheduled scans
# Compile the application
mvn clean compile
# Run tests
mvn test
# Run the application (demonstrates vulnerabilities)
mvn exec:java -Dexec.mainClass="com.example.app.VulnerableApplication"
# View dependency tree to see multiple paths to commons-collections
mvn dependency:tree -Dverbose
To see how commons-collections:3.2.1
appears in multiple paths in the dependency graph, run:
mvn dependency:tree -Dverbose | grep -E "commons-collections|commons-beanutils|commons-digester"
Expected output shows commons-collections:3.2.1
appearing as:
- A direct dependency
- A transitive dependency through
commons-beanutils
(marked as "omitted for duplicate") - A transitive dependency through
commons-digester
→commons-beanutils
This project is for educational and demonstration purposes only.