VERFENDSecurity Operations
← all samples
Illustrative sample

This is a demonstration report, not a client engagement. All testing was performed against OWASP WebGoat — a deliberately-vulnerable application hosted locally for training. No third-party systems were tested. Content shows our reporting format and depth.

Web Application Security Assessment

OWASP WebGoat — findings & remediation

A scoped assessment of an intentionally-vulnerable Java practice target, demonstrating Verfend’s verify → explain → retest methodology.

Target
webgoat.local
(self-hosted)
Engagement
VF-SAMPLE-03
Grey-box
Window
2026-10-18
→ 2026-10-19
Classification
Sample
Public

Scope & authorisation

Target. A single instance of OWASP WebGoat deployed on an isolated local host under our control. WebGoat is published by the OWASP Foundation expressly for security training.

Authorisation. Testing was performed against our own instance only. No production system, customer data or third-party asset was in scope or accessed.

Method. Grey-box testing aligned to OWASP ASVS and the OWASP Web Security Testing Guide; findings verified manually and retested after remediation.

Executive summary

8.1
Max CVSS · high
CRITICAL0
HIGH2
MEDIUM2
LOW1

The assessment confirmed five issues. Insecure deserialization allows code execution from attacker-controlled objects, and a broken access-control check lets a user act outside their role. Token and parser weaknesses (JWT, XXE) follow, with verbose errors leaking internal detail. All findings were reproduced manually, prioritised by real impact, and retested after the fixes below.

IDFindingOWASPSeverityRetest
WG-01Insecure deserialization → RCEA08HIGH 8.1✓ resolved
WG-02Broken access control / privilege escalationA01HIGH 7.5✓ resolved
WG-03JWT weaknesses (“none” alg / weak key)A02MED 6.5✓ resolved
WG-04XML external entity (XXE) injectionA05MED 6.5✓ resolved
WG-05Verbose errors / information disclosureA05LOW 3.7↻ accepted

Findings in detail

WG-01

Insecure deserialization → RCE

HIGH · 8.1
Class
Software & data integrity failures (OWASP A08) · CWE-502
Impact
The endpoint deserializes a client-supplied object without type restriction. A crafted gadget chain triggers code execution during deserialization.
POST /insecure-deserialization/taskevidence
# base64 of a serialized object with a delay gadget
token=rO0ABXNy...<gadget>...

# server blocks for the injected sleep → execution confirmed
response time: 5038 ms  (payload executed)
Remediation
Do not deserialize untrusted data. Prefer a data-only format (JSON) with a schema; if native serialization is required, enforce a strict allow-list of classes.
TaskController.javafix
- Object o = new ObjectInputStream(in).readObject();
+ var mapper = new ObjectMapper();   // JSON, no polymorphic types
+ Task t = mapper.readValue(in, Task.class);
Retest
✓ Resolved. Serialized payloads are rejected; only typed JSON is accepted. Retested 2026-10-19.
WG-02

Broken access control / privilege escalation

HIGH · 7.5
Class
Broken access control (OWASP A01) · CWE-285
Impact
An administrative function checks the role in the UI but not on the server. A standard user calling the endpoint directly can perform admin actions.
POST /access-control/usersevidence
# standard user calls admin endpoint directly
POST /access-control/users  Cookie: role=user
200 OK  → new admin account created  (no server-side check)
Remediation
Enforce authorisation on the server for every sensitive action; deny by default; never rely on hidden UI or client-side role flags.
Retest
✓ Resolved. Non-admin callers receive 403; privileged actions gated server-side.
WG-03

JWT weaknesses (“none” algorithm / weak key)

MEDIUM · 6.5
Class
Cryptographic / auth failures (OWASP A02) · CWE-347
Impact
The API accepts tokens signed with alg:none and a predictable secret. An attacker can forge a token and change the user claim to impersonate others.
Authorization: Bearer <jwt>evidence
# header rewritten, signature stripped
{ "alg": "none" } . { "user": "admin" } .

200 OK  → accepted as admin
Remediation
Pin the algorithm server-side (e.g. HS256/RS256), reject none, and use a long random key managed as a secret. Verify issuer, audience and expiry.
Retest
✓ Resolved. Forged and unsigned tokens rejected; algorithm enforced.

WG-04 (XXE) and WG-05 (verbose errors / information disclosure) are abridged in this public sample, each with evidence, remediation and retest status.

Methodology & standards

OWASP ASVS
verification standard
OWASP WSTG
testing guide
PTES
execution standard
CVSS 3.1
severity scoring

Disclaimer. Illustrative sample for demonstration only. OWASP® and WebGoat are projects of the OWASP Foundation, used here as a public training target; Verfend is not affiliated with OWASP. “Verfend” is a working brand for a local concept. No third-party systems were tested and no real client data appears in this document. A security assessment reflects a defined scope and point in time and does not guarantee the absence of other issues.