Skip to main content

Want to Practice These Techniques?

Try Hackviser's interactive cyber security upskilling platform - Learn by doing!

Start Practicing Now

SonarQube

Default Port: 9000

SonarQube is a source code quality and security analysis platform. In pentests, exposed SonarQube instances can reveal project names, vulnerable code paths, source snippets, developer users, CI tokens, webhooks, and repository integrations.

Connect​

Using Web Browser​

Check the UI for anonymous project visibility and authentication method.

http://target.com:9000
https://sonarqube.target.com
https://sonar.target.com

Using curl​

Use API endpoints to fingerprint the instance and test anonymous access.

curl -I http://target.com:9000/
curl -s http://target.com:9000/api/system/status
curl -s http://target.com:9000/api/server/version

Using API Token​

Leaked SonarQube tokens are commonly found in CI variables and scanner configs.

curl -u TOKEN: http://target.com:9000/api/authentication/validate
curl -u TOKEN: http://target.com:9000/api/projects/search
curl -u TOKEN: http://target.com:9000/api/users/current

Using sonar-scanner​

Scanner configuration often exposes host URLs, project keys, and tokens.

sonar-scanner \
-Dsonar.host.url=http://target.com:9000 \
-Dsonar.projectKey=project-key \
-Dsonar.login=TOKEN

Recon​

Service Detection with Nmap​

Scan the default port and common reverse proxy ports.

nmap -p 80,443,9000,9443 -sV target.com
nmap -p 80,443,9000 --script http-title,http-headers target.com
nmap -p 443,9443 --script ssl-cert,ssl-enum-ciphers target.com

Product Fingerprinting​

Version and status endpoints help confirm SonarQube.

curl -s http://target.com:9000/api/system/status
curl -s http://target.com:9000/api/server/version
curl -s http://target.com:9000/api/webservices/list | head
httpx -u http://target.com:9000 -title -tech-detect -status-code

Authentication Review​

Check anonymous session behavior before credential testing.

curl -I http://target.com:9000/sessions/new
curl -s http://target.com:9000/api/authentication/validate
curl -s http://target.com:9000/api/users/current

API Discovery​

SonarQube exposes an API index when webservices are reachable.

curl -s http://target.com:9000/api/webservices/list | jq
curl -s http://target.com:9000/api/webservices/list | grep -i "projects\|issues\|components\|sources"

Enumeration​

Project Enumeration​

Anonymous project access is the highest-value first check.

curl -s http://target.com:9000/api/projects/search | jq
curl -s "http://target.com:9000/api/projects/search?q=api" | jq
curl -s "http://target.com:9000/api/components/search?qualifiers=TRK" | jq

Branch and Measure Enumeration​

Branches and metrics reveal release flows and vulnerable project areas.

curl -s "http://target.com:9000/api/project_branches/list?project=project-key" | jq
curl -s "http://target.com:9000/api/project_tags/search?project=project-key" | jq
curl -s "http://target.com:9000/api/measures/component?component=project-key&metricKeys=vulnerabilities,bugs,code_smells,ncloc" | jq

Issue Enumeration​

Issues may disclose vulnerable files, rule names, severities, and remediation notes.

curl -s "http://target.com:9000/api/issues/search?componentKeys=project-key&types=VULNERABILITY" | jq
curl -s "http://target.com:9000/api/issues/search?componentKeys=project-key&severities=CRITICAL,BLOCKER" | jq
curl -s "http://target.com:9000/api/hotspots/search?projectKey=project-key" | jq

Source Enumeration​

Source endpoints may expose snippets or full files depending on permissions.

curl -s "http://target.com:9000/api/components/tree?component=project-key&qualifiers=FIL" | jq
curl -s "http://target.com:9000/api/sources/show?key=project-key:path/to/file.java" | jq
curl -i "http://target.com:9000/api/sources/raw?key=project-key:path/to/file.java"

User and Group Enumeration​

User data helps identify developers, admins, and service accounts.

curl -s "http://target.com:9000/api/users/search" | jq
curl -s "http://target.com:9000/api/user_groups/search" | jq
curl -s "http://target.com:9000/api/permissions/users?permission=admin" | jq

Attack Vectors​

Anonymous Project Access​

Anonymous visibility can leak code intelligence without credentials.

curl -s http://target.com:9000/api/projects/search | jq
curl -s "http://target.com:9000/api/issues/search?types=VULNERABILITY" | jq
curl -i "http://target.com:9000/api/sources/show?key=project-key:path/to/file"

Default Credentials​

Check weak local credentials only when in scope.

# Common legacy default:
# admin:admin
curl -u admin:admin http://target.com:9000/api/authentication/validate

Leaked Tokens​

Tokens can provide project, issue, source, or admin access.

rg -n 'sonar.login|sonar.token|SONAR_TOKEN|sonar.host.url' .
curl -u TOKEN: http://target.com:9000/api/users/current
curl -u TOKEN: http://target.com:9000/api/projects/search

Source and Secret Exposure​

Search accessible issues and source snippets for secrets.

curl -s "http://target.com:9000/api/issues/search?componentKeys=project-key" | grep -Ei 'password|secret|token|apikey'
curl -s "http://target.com:9000/api/sources/show?key=project-key:path/to/file" | grep -Ei 'password|secret|token|apikey'

Webhook and Integration Exposure​

Administrative access may reveal CI/CD and repository integrations.

curl -u TOKEN: "http://target.com:9000/api/webhooks/list?project=project-key" | jq
curl -u TOKEN: "http://target.com:9000/api/settings/values?component=project-key" | jq

Post-Exploitation​

Project Impact Review​

Summarize visible projects, branches, issues, and source access.

curl -u TOKEN: http://target.com:9000/api/projects/search > sonarqube-projects.json
curl -u TOKEN: "http://target.com:9000/api/issues/search?types=VULNERABILITY" > sonarqube-vulnerabilities.json

CI/CD Pivot Review​

Project names, scanner configs, and webhooks often point to build systems.

rg -n 'jenkins|gitlab|github|azure|bitbucket|nexus|artifactory|registry' sonarqube-*.json
curl -u TOKEN: "http://target.com:9000/api/webhooks/list" | jq

Account Review​

Document users, groups, and admin permissions.

curl -u TOKEN: "http://target.com:9000/api/users/search" > sonarqube-users.json
curl -u TOKEN: "http://target.com:9000/api/user_groups/search" > sonarqube-groups.json
curl -u TOKEN: "http://target.com:9000/api/permissions/users?permission=admin" > sonarqube-admins.json

Useful Tools​

ToolPurpose
curlAPI and auth testing
jqJSON parsing
httpxWeb fingerprinting
sonar-scannerScanner config validation
rgToken and config searching
nmapPort and TLS checks

Security Misconfigurations​

MisconfigurationRisk
Anonymous project accessProject and issue disclosure
Source endpoints exposedCode and secret leakage
Default or weak local credentialsAdministrative access
Leaked scanner tokensAPI access through CI secrets
Broad project permissionsCross-team data exposure
Webhooks visible to low-privilege usersCI/CD integration leakage
Outdated SonarQubeKnown vulnerability exposure