Vulnerability-finder A/B evaluation · OWASP Juice Shop

Audn Vuln FindervsCodex Vuln Finder

Executive verdict

Both tools scanned the same OWASP Juice Shop source, but they are doing fundamentally different jobs — so this is less "which is better" than "which question are you asking."

Audn is a whole-app adversarial assessment that fuses static analysis with a live red-team run against a deployed target. It maps the entire intentional vulnerability surface (103 findings) and — critically — reproduced 18 of them live. Use it to answer "what can actually be exploited on the running app, right now?"

Codex is a commit-diff code review. Nearly every one of its 20 findings is framed as "introduced by this commit" — it hunts unintended regressions, supply-chain/CI weaknesses, privacy leaks and subtle logic bugs, and ships a proposed patch per finding. Use it to answer "did this change introduce something that shouldn't be there?"

Bottom line: they are complementary, not redundant. Overlap is only 6 issue areas. Audn owns breadth + live proof of the app's real attack surface; Codex owns depth on the changeset and the whole class of build/CI/privacy/regression issues Audn's exploit-focused lens never looks at. Run both; neither alone covers the six shared blind spots (dependency CVEs, client-side depth, multi-step business logic, crypto depth, live infra posture, and unconfirmed-lead exploitability).

103
Audn findings
18 reproduced live · 32 attack paths
20
Codex findings
0 live · static + patch per finding
6
Overlap areas
issues both tools flagged
6
Shared blind spots
classes neither covered

What each tool is — and what it produced

Same target (ozgurozkan123/juice-shop), two very different methodologies. The severity mixes below already tell the story: Audn reports across the full range and confirms a live-critical tier; Codex reports a tighter, mostly high/medium set of introduced issues.

Audn Vuln Finder

Static + live red-team, fused into one ranked list. Live target on Render, run duration 2h 28m, 32 derived attack paths. Findings carry CWE, file:line, CVSS vectors and a confidence tier.
Severity of 103 findingsn = 103
18245254
Critical 18 High 24 Medium 52 Low 5 Info 4

Codex Vuln Finder

Commit-diff code review of commit 160f306. Each finding has a validation rubric, evidence with file:line, and a generated patch. Focus: what the change introduced, plus a full threat model & criticality calibration.
Severity of 20 findingsn = 20
8723
High 8 Medium 7 Low 2 Info 3

Audn's confidence tiers — the honesty layer

Audn's biggest structural advantage is that it grades its own certainty. Only 16 findings are corroborated by both static + live; another 63 are static-only leads the run never reached, and it explicitly labels 4 as likely false positives. This is what separates "facts about the running system" from "patterns in the source." Codex has no equivalent tier — all 20 are static, unverified against a live target.

Audn findings by confidence tier
Ranked by confidence first, severity second
Confirmed16
Observed live2
Probed, no verdict18
Static lead63
Likely false positive4

A/B — pros & cons

Read this against your goal. If the goal is "prove exploitability and cover the app," Audn's column is the one that matters. If the goal is "gate a pull request and catch regressions/supply-chain," Codex's column is.

Audn Vuln Finder

Pros
  • Live reproduction. 18 findings exploited against the running target — facts, not code smells. No other signal in this comparison proves exploitability.
  • Breadth. 103 findings spanning essentially the whole OWASP Top 10 surface of the app.
  • Confidence tiering. Confirmed / observed / probed-no-verdict / lead / likely-FP — you know exactly how much to trust each row.
  • Attack-path narratives. 32 chains with entry → weakness → pivot → impact, and it says "not proven here" when a link is only tradecraft.
  • Precise + rich metadata. CWE, file:line, CVSS vectors, dedup of duplicate call sites.
  • Intellectually honest about gaps. Flags where its own SAST input was truncated rather than pretending coverage.
Cons
  • Most findings unconfirmed. 63 static-only leads + 18 probed-no-verdict — only ~17% reproduced live.
  • No remediation code. Describes the fix in prose; no patches/diffs.
  • Slow. 2h 28m run; needs a deployed, reachable target.
  • Over-reports intentional vulns. Ranks by-design Juice Shop challenges as criticals; no notion of "is this meant to be here."
  • Weak on the changeset. No diff awareness — can't tell a regression from a decade-old line.
  • Misses build/CI/privacy classes and doesn't enumerate dependency CVEs.

Codex Vuln Finder

Pros
  • Catches unintended / introduced bugs. Subtle regressions a whole-app scan glosses over (e.g. no-data JWTs accepted as bearer).
  • Diff-aware. Distinguishes "this commit introduced it" from pre-existing — ideal as a PR gate.
  • Ships patches. A generated git diff per finding; remediation is copy-pasteable.
  • Validation rubric + evidence. Each finding is checklist-verified with file:line proof.
  • Strong threat model & criticality calibration. Explicitly separates intentional challenge vulns from real risk — essential on a deliberately-vulnerable app.
  • Owns classes Audn ignores: CI/CD supply chain, privacy leaks, DoS, Web3 races, cross-platform & code-health regressions.
Cons
  • Narrow. 20 findings (~14 distinct) — misses most of the app's real attack surface by design.
  • No live proof. Static only; 0 findings reproduced against a running target.
  • Scoped to a changeset. Won't tell you the security posture of the whole app.
  • Near-duplicates. Several findings are paired restatements, inflating the count.
  • Scope caveats. Some findings apply only to the upstream repo, not this fork (e.g. the gated image_actions.yml).
  • Deliberately skips intentional vulns — so it won't surface the classic SQLi/XSS/IDOR you may actually want catalogued.

Methodology, side by side

DimensionAudn Vuln FinderCodex Vuln Finder
Core methodStatic analysis fused with a live red-team / DAST runStatic code review of a specific commit diff
ScopeWhole application, deployed instanceWhat the changeset introduced
Findings103 (18 Crit / 24 High / 52 Med / 5 Low / 4 Info)20 (8 High / 7 Med / 2 Low / 3 Info)
Live confirmation18 reproduced live; explicit confidence tiersNone — all static, unverified at runtime
RemediationProse guidance, CVSS, attack pathsGenerated patch (git diff) per finding
Intentional vs unintendedDoes not distinguish — ranks by severity/confidenceExplicitly separates challenge vulns from real risk
Sweet spotPentest / attack-surface mapping / exploitability proofPR gate / regression & supply-chain review
Runtime costHeavy — 2h 28m, needs a live targetLight — static, diff-scoped
Blind to…Build/CI, privacy, dependency CVEs, the diffThe 88 app-surface vulns it never looked for

Gap analysis — who found what

The taxonomies don't line up 1:1 (Audn uses CWE + file:line; Codex uses descriptive, diff-scoped titles), so overlap is mapped at the issue-area level. The headline: the two sets barely intersect.

88Audn only
App-surface vulnerabilities Codex never looked for — SQLi, XSS, IDOR, XXE, hard-coded secrets, weak crypto, and the live-confirmed criticals.
6Found by both
Issue areas both tools flagged — mostly JWT and CI/supply-chain. 15 Audn findings ↔ 11 Codex findings collapse into these 6 clusters.
9Codex only
Introduced regressions, privacy, DoS, AI-tooling SSRF, cross-platform & code-health issues outside Audn's exploit lens.

Units differ by design: Audn counts individual findings (88 exclusive + 15 shared = 103); Codex's 20 findings collapse to ~14 distinct issues (9 exclusive + the rest across the 6 shared clusters). "6 shared areas" is the issue-level intersection.

① The intersection — 6 issue areas both tools flagged

C1

Forgeable / weakly-verified JWT

Both flag that JWTs can be forged/altered. Audn traces the hard-coded RSA key and algorithm-confusion in lib/insecurity.ts as a pre-existing weakness; Codex flags a newly-introduced global registration of forged JWTs (app.use(updateAuthenticatedUsers())) that widens it to account takeover — plus 2FA temp-JWTs accepted as bearer.

Audn #22, #35, #90Codex #3, #4
C2

Unpinned CI actions w/ repo token (image_actions.yml)

Same file, same root cause: image_actions.yml runs mutable third-party actions (@main) with GITHUB_TOKEN. Audn rates it Medium (static lead); Codex rates it High and ships a pinning patch.

Audn #54Codex #1, #2
C3

Release-tag command injection (news workflows)

Both find shell-command injection from the release tag name in the news-update workflows. Audn flags both update-news-www.yml and the legacy variant; Codex focuses on the legacy workflow with a cross-repo bot token and a patch.

Audn #23, #36Codex #5
C4

npm lockless / mutable Docker supply chain

Both flag the npm/Docker build integrity gap. Audn: lockless installs (.npmrc), mutable base images and build-arg npm injection in the Dockerfile. Codex: deleted lockfiles + npm install in release/Docker paths and --ignore-scripts removed in CI.

Audn #21, #25, #34, #32Codex #6, #12
C5

LLM chat order-lookup authorization

Both hit the chatbot getOrderById authorization in routes/chat.ts. Audn: unverified JWT controls chat identity + lossy vowel-stripping email match collides identities. Codex: the order tool trusts an unsigned JWT payload as the authenticated identity.

Audn #59, #88, #60Codex #7, #8
C6

Web3 listener routes (complementary bugs)

Same two files (nftMint.ts, web3Wallet.ts) — different bug each. Audn: wallet ownership is never verified (authorization). Codex: lazy await import('ethers') races the isEventListenerCreated flag, creating duplicate listeners (resource exhaustion). A good illustration of how the two lenses complement each other.

Audn #96, #98Codex #10, #11

② Codex only — 9 findings Audn missed

These cluster into classes Audn's app-exploit lens structurally can't see: changeset regressions, supply-chain-of-recent-changes, privacy, DoS, AI/developer tooling, and code health.

High
2FA temporary JWTs accepted as bearer auth

A commit stopped inserting no-data JWTs into authenticatedUsers to avoid a crash, but those tokens are still not rejected — they flow through as valid bearer auth. A subtle regression an app-surface red-team wouldn't reach.

routes/2fa flow / insecurity.ts
Medium
Unbounded complaint similarity scan → DoS

A per-request challenge check runs an unbounded ComplaintModel.findAll() plus an O(n) string-similarity loop over every complaint — a denial-of-service amplifier introduced by the changeset.

routes/verify.ts, models/complaint.ts
Medium
Junie AI-skill curls untrusted reference URLs (SSRF)

A newly-added developer/AI-agent skill fetches arbitrary URLs with shell curl and feeds the response back to the agent — untrusted retrieval that can reach localhost/link-local/internal ranges. A supply-chain / agent-tooling surface Audn never scanned.

.junie/skills/add-reference/SKILL.md
Medium
External Google Fonts load leaks CTF visitor metadata

The new default "neon-fire" theme hard-codes remote Google Fonts (fonts.googleapis.com/gstatic.com), leaking every visitor's IP/UA/referer to a third party. A privacy/info-leak class Audn's exploit-focused lens ignores.

config/ctf.yml, index.html
Low
Windows-only i18n restore path bug

New code passes a native Windows absolute glob to Unix-only basename parsing — breaks i18n file restore on Windows. A cross-platform robustness bug, invisible to a Linux live target.

lib/startup/restoreOverwrittenFilesWithOriginals.ts
Info
Challenge-name capitalization hides Hacking Instructor

A display-name capitalization mismatch breaks an exact-match lookup, making the Exposed-Credentials guided tutorial unavailable. Non-security functional regression.

data/static/challenges.yml
Info
Complaint length test drops max-boundary assertion

Test-coverage regression: the spec no longer asserts that exactly 4096 chars is valid. Pure code-health finding.

complaint.component.spec.ts
Info
Missing snippet metadata now causes 500

Optional metadata-file absence is no longer handled gracefully and throws a 500 instead of degrading. Robustness regression.

routes/vulnCodeSnippet.ts

③ Audn only — 88 findings Codex missed (by class)

The entire intentional-vulnerability surface of the app, including the live-confirmed criticals. Green counts = reproduced against the running target. Hover any chip for its CWE and location.

13
Broken Access Control / IDOR
Anonymous users can modify productsUsers can edit reviews owned by othersOrdinary users can enumerate all user profilesAnonymous callers can forge product reviewsBasket IDOR exposes other users' cartsDuplicate BasketId bypasses basket ownership checkCoupon update lacks basket ownership checkCheckout lacks basket ownership validationArray ID exposes multiple recycle recordsPremium content served without authorizationMasked email collisions expose other users' ordersAny commenter can rebase pull requestsAnonymous users can access arbitrary orders
12
Sensitive Data Exposure
· 3 live
CWE-532: Insertion of Sensitive Information into Log FileCWE-200: Exposure of Sensitive Information to an Unauthorized ActorCWE-200: Exposure of Sensitive Information to an Unauthorized ActorEndpoint exposes complete runtime configurationRepository code executes with CI secretsProduction error handler exposes stack tracesMetrics endpoint is exposed without authenticationAnonymous FTP directory listing exposes hidden filesArbitrary field selection exposes credential materialCAPTCHA response discloses its answerCAPTCHA answer disclosed in API responseAuthentication token contains the TOTP seed
10
Hardcoded Secrets/Creds
· 4 live
CWE-321CWE-798: Use of Hard-coded CredentialsCWE-798: Use of Hard-coded CredentialsCWE-798: Use of Hard-coded CredentialsBender account password exposed client-sideJim account password exposed client-sideCommitted CTF key permits flag forgeryGenerated users share a hard-coded passwordTOTP secrets stored unencryptedActive user credentials embedded in client code
6
XSS
· 1 live
Search query causes DOM-based XSSTracking ID enables reflected cross-site scriptingCWE-79: Improper Neutralization of Input During Web Page Generation (Cross-site Scripting)Remote SVG upload enables stored XSSApplication name injects executable HTMLFeedback XSS compromises administrator sessions
6
Path Traversal
ZIP upload permits arbitrary application file overwriteBackslashes bypass quarantine path validationNull suffix bypass enables Windows file traversalUser-controlled layout enables local file disclosureBackslashes bypass log path validationBackslashes bypass key-file path restriction
4
Improper Input Validation
Unvalidated seed data can create administratorsFeedback accepts ratings outside the valid rangeArbitrary wallet balance top-upsUnanchored coupon validation accepts unbounded discounts
3
NoSQL Injection
· 2 live
CWE-943CWE-943NoSQL selector updates every product review
3
DoS / Resource Exhaustion
Unbounded upload can exhaust server diskYAML aliases block the Node.js event loopUnbounded image download exhausts server storage
3
Broken Authentication
Password change skips current-password verificationSecurity answer bypass permits unverified erasure requestsResponse discrepancy enables account enumeration
3
Race Condition
Wallet debit permits concurrent overspendingNew commits bypass completed compliance decisionsConcurrent requests inflate review likes
2
Auth Rate-Limiting
· 2 live
CWE-307CWE-307
2
Weak Credentials/Hashing
· 2 live
CWE-521CWE-916
2
SQL Injection
· 1 live
Login query permits authentication bypassCWE-89: Improper Neutralization of Special Elements used in an SQL Command (SQL Injection)
2
Other
· 2 live
Spoofable X-Forwarded-For header bypasses password-reset rate limit (account-takeover enabler)Unauthenticated public access logs contain change-password URLs with cleartext current/new passwords
2
Code Injection / RCE
Order data enables remote code executionStored username enables server-side code execution
2
Cleartext Transmission
Default deployment exposes credentials over plain HTTPProduct link uses cleartext HTTP
2
Broken Anti-Automation
Solved CAPTCHAs remain valid for unlimited reuseMissing CAPTCHA record bypasses verification
2
Insufficient Verification
Failed requests satisfy global anti-cheat checksClient header spoofs stored login IP
2
Business Logic
Client clock controls campaign coupon validityUnverified issue references defeat spam enforcement
2
CSRF
OAuth flow omits state validationProfile update lacks CSRF enforcement
1
Weak Password Recovery
· 1 live
CWE-640: Weak Password Recovery Mechanism for Forgotten Password
1
XXE
Anonymous XML upload discloses local files
1
SSRF
Profile image URL enables SSRF
1
Open Redirect
Substring allowlist permits arbitrary external redirects
1
Supply Chain / CI-CD
Unversioned Playwright install can overwrite master

④ Unknown unknowns — what neither tool surfaced

Cross-referenced against Juice Shop's own 113-challenge catalogue (16 categories). These are the shared blind spots — treat them as "do not assume covered," not "confirmed absent."

1
Dependency / component CVEs Vulnerable Components · 8 challenges

Neither enumerated actual CVEs in the intentionally-vulnerable npm packages. Audn treats them as noise; Codex explicitly deprioritizes "known vulnerable dependencies intentionally used." → Run a real SCA (npm audit / Snyk / OWASP Dependency-Check).

2
Client-side / front-end depth XSS · 9 challenges

Both are server-code-centric. Angular DOM sinks beyond the few flagged, CSP weaknesses, client-side routing/auth, and stored-vs-reflected variants are under-explored. Only a handful of the 9 XSS challenges surfaced.

3
Multi-step business-logic chains Broken Access Control · 12

Many challenges require chaining (GDPR erasure flow, forged-coupon end-to-end, premium unlocks, "Christmas special"). Audn surfaces the component leads; few are demonstrated end-to-end. Codex is out of scope for these entirely.

4
Cryptographic depth Cryptographic Issues · 5

Weak encryption of specific data, the nested easter-egg, backup decryption, and JWT issues beyond the flagged key/alg are only partially reached.

5
Live runtime & infra posture Deployment

TLS config, security headers, container hardening and real-secret exposure on the actual Render instance weren't audited. Audn probed live but left 18 findings at "no verdict."

6
Exploitability of the unconfirmed majority Confidence gap

63 Audn static leads + 18 probed-no-verdict + all 20 Codex findings are unverified against a live target. Whether each is truly exploitable in your deployment is unknown until proven.

Coverage matrix — by vulnerability class

Where each tool put its attention. ●●● = strong (8+ findings), ●● = moderate (3–7), ● = light (1–2), — = none. This is the clearest picture of how little the two overlap: Audn owns the top of the OWASP surface; Codex concentrates in supply-chain, privacy and introduced logic bugs.

Vulnerability classAudnCodex
SQL Injection2
NoSQL Injection●●3
XSS●●6
XXE1
SSRF12
Path Traversal●●6
Code Injection / RCE21
Broken Access Control / IDOR●●●162
JWT / Token Auth●●32
Auth Rate-Limiting2
Weak Password Recovery1
Weak Credentials/Hashing2
Hardcoded Secrets/Creds●●●11
Sensitive Data Exposure●●●122
Open Redirect1
CSRF2
Broken Anti-Automation2
Business Logic2
Race Condition●●32
Improper Input Validation●●42
Cleartext Transmission2
DoS / Resource Exhaustion●●31
Supply Chain / CI-CD●●●8●●6
Insufficient Verification●●3

Counts are findings tagged to each class. Codex classes are aggregated from its 20 findings (including near-duplicate pairs). Classes with "—" for both are candidates for the unknown-unknowns list.

All findings

Every finding from both reports, filterable. Use this as the working index behind the analysis above.

Audn — 103 findings

Severity
Overlap
#SevFindingCWELocationConfidenceOverlap
#1CriticalCWE-532: Insertion of Sensitive Information into Log File LIVECWE-532server.ts:280ConfirmedAudn only
#2CriticalCWE-307 LIVECWE-307server.ts:340ConfirmedAudn only
#3CriticalCWE-521 LIVECWE-521frontend/src/app/oauth/oauth.component.ts:27ConfirmedAudn only
#4CriticalCWE-321 LIVECWE-321data/static/users.yml:259ConfirmedAudn only
#5CriticalCWE-798: Use of Hard-coded Credentials LIVECWE-798data/static/users.yml:167ConfirmedAudn only
#6CriticalCWE-798: Use of Hard-coded Credentials LIVECWE-798config/7ms.yml:143ConfirmedAudn only
#7CriticalCWE-640: Weak Password Recovery Mechanism for Forgotten Password LIVECWE-640routes/resetPassword.ts:18ConfirmedAudn only
#8CriticalCWE-798: Use of Hard-coded Credentials LIVECWE-798routes/login.ts:59ConfirmedAudn only
#9HighCWE-89: Improper Neutralization of Special Elements used in an SQL Command (SQL Injection) LIVECWE-89routes/search.ts:21ConfirmedAudn only
#10HighCWE-943 LIVECWE-943routes/trackOrder.ts:15ConfirmedAudn only
#11HighCWE-943 LIVECWE-943routes/showProductReviews.ts:31ConfirmedAudn only
#12HighCWE-916 LIVECWE-916models/user.ts:73ConfirmedAudn only
#13HighCWE-79: Improper Neutralization of Input During Web Page Generation (Cross-site Scripting) LIVECWE-79models/product.ts:42ConfirmedAudn only
#14HighCWE-200: Exposure of Sensitive Information to an Unauthorized Actor LIVECWE-200routes/memory.ts:22ConfirmedAudn only
#15HighCWE-307 LIVECWE-307routes/2fa.ts:16ConfirmedAudn only
#16HighCWE-200: Exposure of Sensitive Information to an Unauthorized Actor LIVECWE-200lib/challengeUtils.ts:52ConfirmedAudn only
#17CriticalSpoofable X-Forwarded-For header bypasses password-reset rate limit (account-takeover enabler) LIVEObservedAudn only
#18CriticalUnauthenticated public access logs contain change-password URLs with cleartext current/new passwords LIVEObservedAudn only
#19CriticalZIP upload permits arbitrary application file overwrite CWE-22routes/fileUpload.ts:27ProbedAudn only
#20CriticalSearch query causes DOM-based XSS CWE-79frontend/src/app/search-result/search-result.component.ts:135ProbedAudn only
#21CriticalMutable base images enter production builds CWE-829Dockerfile:1ProbedBoth
#22CriticalHardcoded JWT private key enables token forgery CWE-321lib/insecurity.ts:20ProbedBoth
#23CriticalRelease tag enables cross-repository command injection CWE-78.github/workflows/update-news-www.yml:18ProbedBoth
#24CriticalTracking ID enables reflected cross-site scripting CWE-79frontend/src/app/track-result/track-result.component.ts:45ProbedAudn only
#25CriticalBuild argument injects arbitrary npm packages CWE-88Dockerfile:18ProbedBoth
#26HighAnonymous XML upload discloses local files CWE-611server.ts:307ProbedAudn only
#27HighProfile image URL enables SSRF CWE-918server.ts:307ProbedAudn only
#28HighUnbounded upload can exhaust server disk CWE-400server.ts:698ProbedAudn only
#29HighBackslashes bypass quarantine path validation CWE-22routes/quarantineServer.ts:10ProbedAudn only
#30HighOrder data enables remote code execution CWE-94routes/b2bOrder.ts:19ProbedAudn only
#31HighStored username enables server-side code execution CWE-95routes/userProfile.ts:54ProbedAudn only
#32HighRemote installer executes without integrity verification CWE-494.github/workflows/ci.yml:357ProbedBoth
#33HighRemote SVG upload enables stored XSS CWE-79server.ts:310ProbedAudn only
#34HighLockless installs execute mutable dependency code CWE-829.npmrc:1ProbedBoth
#35HighJWT verification trusts attacker-selected algorithm CWE-347lib/insecurity.ts:52ProbedBoth
#36HighRelease tag injects commands into legacy website update CWE-78.github/workflows/update-news-www-legacy.yml:18ProbedBoth
#37CriticalLogin query permits authentication bypass CWE-89routes/login.ts:32Static leadAudn only
#38HighNull suffix bypass enables Windows file traversal CWE-22routes/fileServer.ts:16Static leadAudn only
#39HighPassword change skips current-password verification CWE-620routes/changePassword.ts:39Static leadAudn only
#40HighEndpoint exposes complete runtime configuration CWE-200routes/appConfiguration.ts:10Static leadAudn only
#41HighRepository code executes with CI secrets CWE-200.github/workflows/ci.yml:229Static leadAudn only
#42HighSecurity answer bypass permits unverified erasure requests CWE-620routes/dataErasure.ts:74Static leadAudn only
#43MediumProduction error handler exposes stack traces CWE-209server.ts:314Static leadAudn only
#44MediumMetrics endpoint is exposed without authentication CWE-200server.ts:725Static leadAudn only
#45MediumAnonymous FTP directory listing exposes hidden files CWE-548server.ts:267Static leadAudn only
#46MediumAnonymous users can modify products CWE-862server.ts:368Static leadAudn only
#47MediumYAML aliases block the Node.js event loop CWE-400routes/fileUpload.ts:101Static leadAudn only
#48MediumSubstring allowlist permits arbitrary external redirects CWE-601routes/redirect.ts:13Static leadAudn only
#49MediumUnbounded image download exhausts server storage CWE-400routes/profileImageUrlUpload.ts:24Static leadAudn only
#50MediumUsers can edit reviews owned by others CWE-639routes/updateProductReviews.ts:16Static leadAudn only
#51MediumNoSQL selector updates every product review CWE-943routes/updateProductReviews.ts:17Static leadAudn only
#52MediumOrdinary users can enumerate all user profiles CWE-862routes/authenticatedUsers.ts:10Static leadAudn only
#53MediumArbitrary field selection exposes credential material CWE-200routes/currentUser.ts:20Static leadAudn only
#54MediumMutable actions receive repository write capability CWE-829.github/workflows/image_actions.yml:29Static leadBoth
#55MediumUnversioned Playwright install can overwrite master CWE-829.github/workflows/frontend-bundle-analysis.yml:39Static leadAudn only
#56MediumUnvalidated seed data can create administrators CWE-20data/staticData.ts:55Static leadAudn only
#57MediumApplication name injects executable HTML CWE-79lib/startup/customizeApplication.ts:83Static leadAudn only
#58MediumAnonymous callers can forge product reviews CWE-862routes/createProductReviews.ts:14Static leadAudn only
#59MediumUnverified JWT controls chatbot order identity CWE-347routes/chat.ts:42Static leadBoth
#60MediumCoupon policy enforced only by the LLM CWE-862routes/chat.ts:176Static leadBoth
#61MediumDefault deployment exposes credentials over plain HTTP CWE-319server.ts:130Static leadAudn only
#62MediumBender account password exposed client-side CWE-798frontend/src/hacking-instructor/challenges/loginBender.ts:75Static leadAudn only
#63MediumJim account password exposed client-side CWE-798frontend/src/hacking-instructor/challenges/loginJim.ts:64Static leadAudn only
#64MediumCAPTCHA response discloses its answer CWE-200routes/captcha.ts:22Static leadAudn only
#65MediumSolved CAPTCHAs remain valid for unlimited reuse CWE-294routes/captcha.ts:35Static leadAudn only
#66MediumFailed requests satisfy global anti-cheat checks CWE-345lib/antiCheat.ts:51Static leadAudn only
#67MediumCommitted CTF key permits flag forgery CWE-321ctf.key:1Static leadAudn only
#68MediumProduct link uses cleartext HTTP CWE-319config/addo.yml:57Static leadAudn only
#69MediumClient clock controls campaign coupon validity CWE-602frontend/src/app/payment/payment.component.ts:152Static leadAudn only
#70MediumFeedback accepts ratings outside the valid range CWE-20models/feedback.ts:57Static leadAudn only
#71MediumBasket IDOR exposes other users' carts CWE-639routes/basket.ts:18Static leadAudn only
#72MediumDuplicate BasketId bypasses basket ownership check CWE-639routes/basketItems.ts:21Static leadAudn only
#73MediumCoupon update lacks basket ownership check CWE-639routes/coupon.ts:11Static leadAudn only
#74MediumUser-controlled layout enables local file disclosure CWE-22routes/dataErasure.ts:103Static leadAudn only
#75MediumCAPTCHA answer disclosed in API response CWE-200routes/imageCaptcha.ts:24Static leadAudn only
#76MediumMissing CAPTCHA record bypasses verification CWE-693routes/imageCaptcha.ts:42Static leadAudn only
#77MediumWallet debit permits concurrent overspending CWE-362routes/order.ts:148Static leadAudn only
#78MediumCheckout lacks basket ownership validation CWE-639routes/order.ts:34Static leadAudn only
#79MediumArray ID exposes multiple recycle records CWE-639routes/recycles.ts:11Static leadAudn only
#80MediumPremium content served without authorization CWE-862routes/premiumReward.ts:12Static leadAudn only
#81MediumResponse discrepancy enables account enumeration CWE-204routes/securityQuestion.ts:12Static leadAudn only
#82MediumArbitrary wallet balance top-ups CWE-20routes/wallet.ts:23Static leadAudn only
#83MediumClient header spoofs stored login IP CWE-345routes/saveLoginIp.ts:18Static leadAudn only
#84MediumMasked email collisions expose other users' orders CWE-639routes/orderHistory.ts:13Static leadAudn only
#85MediumAuthentication token contains the TOTP seed CWE-200routes/2fa.ts:26Static leadAudn only
#86MediumUnverified issue references defeat spam enforcement CWE-840.github/workflows/pr-compliance.yml:275Static leadAudn only
#87MediumAny commenter can rebase pull requests CWE-862.github/workflows/rebase.yml:3Static leadAudn only
#88MediumLossy email masking breaks order ownership CWE-187routes/chat.ts:158Static leadBoth
#89MediumNew commits bypass completed compliance decisions CWE-367.github/workflows/pr-compliance.yml:3Static leadAudn only
#90MediumJWT algorithm confusion accepts forged tokens CWE-347routes/verify.ts:111Static leadBoth
#91MediumAnonymous users can access arbitrary orders CWE-639routes/trackOrder.ts:12Static leadAudn only
#92MediumOAuth flow omits state validation CWE-352frontend/src/app/login/login.component.ts:147Static leadAudn only
#93MediumUnanchored coupon validation accepts unbounded discounts CWE-20lib/insecurity.ts:102Static leadAudn only
#94MediumGenerated users share a hard-coded password CWE-798data/datacreator.ts:310Static leadAudn only
#95LowConcurrent requests inflate review likes CWE-362routes/likeProductReviews.ts:25Static leadAudn only
#96LowPublic wallet address accepted as ownership proof CWE-345routes/nftMint.ts:41Static leadBoth
#97LowProfile update lacks CSRF enforcement CWE-352routes/updateUserProfile.ts:16Static leadAudn only
#98LowWallet ownership is never verified CWE-862routes/web3Wallet.ts:14Static leadBoth
#99LowTOTP secrets stored unencrypted CWE-312routes/2fa.ts:105Static leadAudn only
#100InfoActive user credentials embedded in client code CWE-798frontend/src/hacking-instructor/challenges/exposedCredentials.ts:51Likely FPAudn only
#101InfoFeedback XSS compromises administrator sessions CWE-79frontend/src/app/administration/administration.component.ts:86Likely FPAudn only
#102InfoBackslashes bypass log path validation CWE-22routes/logfileServer.ts:9Likely FPAudn only
#103InfoBackslashes bypass key-file path restriction CWE-22routes/keyServer.ts:10Likely FPAudn only

Codex — 20 findings

Severity
Overlap
#SevFindingKey filesOverlap
#1HighUnpinned CI image actions receive repository token.github/workflows/image_actions.yml, github/workflows/image_actions.ymlBoth
#2HighUnpinned image workflow actions expose CI token.github/workflows/image_actions.yml, github/workflows/image_actions.ymlBoth
#3High2FA temporary JWTs accepted as bearer authserver.ts, lib/insecurity.tsBoth
#4HighGlobal forged-JWT registration enables account takeoverlib/insecurity.ts, server.tsBoth
#5HighRelease tag command injection in legacy website workflow.github/workflows/update-news-www-legacy.yml, tab_news.mdBoth
#6HighUnpinned npm installs in release and Docker buildspackage-lock.js, bin/semver.jsBoth
#7HighChat order tool trusts unverified JWT identityroutes/chat.ts, server.tsBoth
#8HighChat order tool trusts unsigned JWT identityroutes/chat.ts, lib/insecurity.tsBoth
#9MediumUnbounded complaint similarity scan enables DoSserver.ts, routes/verify.tsCodex only
#10MediumLazy Web3 imports race creates duplicate listenersserver.ts, routes/nftMint.tsBoth
#11MediumLazy ethers import races Web3 listener creationroutes/nftMint.ts, routes/web3Wallet.tsBoth
#12MediumCI smoke test re-enables npm lifecycle scripts.github/workflows/ci.yml, package.jsBoth
#13MediumJunie skill curls untrusted reference URLs.junie/skills/add-reference/SKILL.md, REFERENCES.mdCodex only
#14MediumUnsafe Junie curl crawling can expose local/internal resources.junie/skills/add-reference/SKILL.md, junie/skills/add-reference/SKILL.mdCodex only
#15MediumExternal Google Font leaks visitor metadataconfig/ctf.yml, frontend/angular.jsCodex only
#16LowUnconditional Google Fonts load leaks CTF visitor metadataserver.ts, frontend/angular.jsCodex only
#17LowWindows i18n restore uses Unix-only basename parsingen.js, lib/startup/restoreOverwrittenFilesWithOriginals.tsCodex only
#18InfoChallenge name mismatch hides Hacking Instructordata/static/challenges.yml, frontend/src/hacking-instructor/challenges/exposedCredentials.tsCodex only
#19InfoComplaint length test no longer checks max boundaryfrontend/src/app/complaint/complaint.component.spec.ts, frontend/src/app/complaint/complaint.component.tsCodex only
#20InfoMissing snippet metadata now causes 500 errors.info.yml, server.tsCodex only