A signed test report against a live reflected parameter
During fieldwork on a payments API you review ASC PA-07, which states that all user-supplied input is validated server-side before use. The verification record, dated four months ago, states that 12 input fields were tested with malformed values and passed; it is signed by the developer who wrote the validation code. In a walkthrough the developer demonstrates a refund endpoint that reflects a query parameter into the response body without encoding. You send a marker string and it is returned verbatim. The developer says this is acceptable because the web application firewall blocks cross-site scripting in production. You check the firewall configuration: the rule set was deployed three weeks ago, and the endpoint's path is on an exclusion list following a false-positive incident. Firewall logs show no events for that path. Asked who validated the control in operation, the developer says validation was done at design and points to the same test report. The application's targeted trust level is high and it processes card data.
1. Assess the sufficiency and reliability of the verification record and reach a conclusion on ASC PA-07. Show the reasoning that distinguishes verification from validation here.
Read the worked answer
Reliability of the record. The record is relevant to the ASC but its reliability is weak on three counts. First, it is self-review: the person who wrote the validation code also signed the verification, so there is no independent challenge and the self-review threat is unmitigated. Second, its scope is 12 named fields and there is no evidence that the refund endpoint's parameter was among them, or that the field list was derived from a data-flow analysis of the API. Third, it describes testing of individual fields rather than of the endpoint behaviour that an attacker reaches.
The contradiction. Direct observation and re-performance are stronger evidence than a self-signed record. The endpoint reflected the marker string verbatim, which is an observed behaviour of the running application, not an opinion. The correct handling is not to average the two sources but to prefer the observed behaviour and then test whether the record is wrong, out of date, or scoped too narrowly.
Verification versus validation. Verification asks whether the control was implemented as specified and tested against its stated method. Validation asks whether the control, as implemented, is fit for purpose in the operational context - here, a high-trust application processing card data. The developer's answer conflates the two by pointing at design-time testing as if it settled operational fitness. Even if verification had been independent, validation in a production-like environment has not been demonstrated, and the trust level demands it.
Conclusion. ASC PA-07 is not demonstrated to be implemented for the refund endpoint. Provisionally this is a nonconformity. Severity turns on exploitability and trust level; at high trust with card data and a reachable reflected parameter, I would raise it as major unless compensating evidence exists. A second, distinct finding may also be warranted: the ASC statement itself is too narrow, because it addresses input validation but not output encoding, so the ANF's control set may be inadequate for the trust level. Compliance testing alone would have missed that.
2. What further procedures would you perform before finalising, and how would you sequence them given that fieldwork closes in three days?
Read the worked answer
Sequencing is driven by which procedure could change the conclusion fastest and which protects the auditee from an unfair finding.
Day one.
- Reproduce the reflection in the test environment with encoded payload variants and different content types, and record exact requests and responses.
- Review ASC PA-07's implementation guidance and the ANF for any other control covering output encoding; establish whether the gap is implementation or design.
- Obtain the release history and confirm whether the verification record predates any change to the endpoint.
Day two.
- Examine the firewall exclusion: the ticket that requested it, the approver, the risk assessment, and whether the exclusion was reviewed against this threat.
- Verify firewall coverage empirically by sending a benign marker payload that the rule should block; if the path is excluded, nothing will be logged, which confirms the exclusion rather than the protection.
- Sample four other endpoints for the same pattern to establish whether the defect is isolated or systemic - this drives whether the finding is major and whether it is one finding or a family.
Day three.
- Interview the approver of the exclusion and the application security lead, with prepared questions and a second auditor present.
- Check whether pipeline static or dynamic analysis should have caught the pattern, and if so why it did not.
- Put the evidence to the auditee in a factual accuracy discussion before writing the finding.
Recording. Log the finding with condition, criteria (the ASC statement and the adopted verification and validation expectations), evidence (request and response, timestamp, firewall configuration excerpt, log query with zero results), effect and proposed severity. In the evidence register, note the conflict between the signed record and the observation and state how it was resolved. Retain the raw probe output. If production testing is refused, record the refusal and report the finding on test-environment evidence with that limitation stated.
3. How would you treat the developer's firewall argument, and how should the compensating-control claim be documented in the report?
Read the worked answer
Substance of the argument. A compensating control must be documented, scoped, tested, owned and monitored. Here none of those conditions is met. The rule set was deployed three weeks ago, so it could not have compensated during the prior period. The affected path is explicitly excluded, so the firewall provides no coverage of the very endpoint in question; the exclusion exists for false-positive management and has no recorded risk assessment against this threat. Logs show no events for the path, which is consistent with exclusion and proves nothing about protection. Reliance on a firewall for output encoding is also a defence-in-depth argument, not a substitute for the ASC, unless the ONF expressly permits that substitution at high trust level - and no such permission has been produced.
Handling in the report. Do not accept the compensating control. Present the facts in order: the observation, the firewall configuration with the exclusion, the absence of a risk assessment for the exclusion, and the consequence that no compensating coverage exists. If the auditee wishes to argue compensation, ask for a documented assessment with defined scope, evidence of tested coverage, an owner, monitoring and a review date; if provided before the report is issued, reassess severity and record the reassessment. If provided after, it belongs in the management response, not in the auditor's conclusion.
Wording. Separate the two issues: the missing implementation at the endpoint, and reliance on an untested compensating control as a governance failure. The second is often more important than the first because it predicts recurrence. Avoid quoting the developer's opinion as though it were evidence; quote the configuration and the absence of records. Where the developer's explanation is relevant, attribute it and state why it was not accepted, so the auditee can see the reasoning and respond to it.
4. The developer asks whether the exclusion can simply be removed so the finding goes away. Advise the audit team on how to respond.
Read the worked answer
Removing the exclusion is a correction, and correction during an audit does not erase the observation. The audit conclusion concerns the period under review and the state of the control at the time of testing; a change made after the auditor's observation is evidence for the corrective action, not evidence that the condition never existed. Respond in three parts.
First, state the position plainly: the finding will be reported, and the post-audit change will be recorded as the auditee's correction with a date, which is favourable to them in the management response.
Second, warn against a purely operational fix. Removing the exclusion will re-enable rules that previously caused false positives, and if the underlying encoding defect is not fixed the application may start rejecting legitimate traffic and the exclusion may be restored informally. The correction must be paired with output encoding at the endpoint and a regression test.
Third, obtain evidence: the change record, the test results after the exclusion was removed, the monitoring in place for new false positives, and confirmation that the endpoint now returns encoded output. Test it yourself rather than accepting the change ticket.
Advise the team not to negotiate scope or severity with developers at all - that discussion belongs with the engagement sponsor and through the factual accuracy process. Also note in the file that the change was made during the audit, so a later reviewer does not mistakenly conclude that the control was always effective. Finally, check whether the same exclusion pattern exists on other paths or applications; a single engineer's willingness to fix one endpoint often reveals a systemic exclusion habit.