Skip to main content

Security Requirements Validation

Validation is the mechanism that converts defined requirements into observable assurance. It is not enough for a requirement to exist in the catalogue - it is necessary to confirm that it has been implemented, that it works as expected and that auditable evidence of this exists. This document prescribes how to do so systematically, proportionally to risk and integrated into the development cycle.


1) Guiding principles​

Security requirements validation must be:

  • Systematic - tied to well-defined moments of the lifecycle, not ad hoc;
  • Proportional to risk - requirements of higher criticality demand deeper and more independent validation;
  • Traceable - each validation produces an explicit link between requirement, method, result and evidence;
  • Repeatable - automatable or documented in enough detail for replication;
  • Independent - whenever possible, performed by someone outside the direct implementation line.

2) Validation methods​

The choice of method depends on the type of requirement and on the phase in which it is applied. The methods are not mutually exclusive - for critical requirements, combining two or more is the correct approach.

Static Analysis (SAST)​

Applies to requirements that translate into code patterns, configurations or predictable structures. It must be run during development and in the build pipeline, and must verify:

  • Presence of input validation;
  • Use of approved cryptographic libraries and algorithms;
  • Absence of hardcoded secrets;
  • Control of the authentication and authorisation flow.

Results must be correlated with the project's requirement identifiers (SEC-Lx-*).

Dynamic Analysis (DAST)​

Applies to requirements that manifest in runtime behaviour. It must be used in a test or pre-production environment. It allows validation of:

  • Exposure of endpoints and security headers;
  • Behaviour when faced with malicious input;
  • Absence of errors or improper disclosures;
  • Response to authentication failures or misconfigured authorisation.

Functional security tests​

These complement dynamic analysis with explicit verification of each requirement's acceptance criteria. They must include:

  • Verification of the expected behaviour (positive case);
  • Attempt to bypass the control (negative case);
  • Coverage of edge cases, restrictions and anticipated failures.

Structured technical review​

Performed by analysts, architects or security staff. Suitable for requirements whose control is distributed or implicit - logical segregation, external dependencies, cross-cutting session control. It must take place after relevant milestones: release candidate, critical pull request, internal audit.

Continuous validation in CI/CD​

Critical requirements must be tied to blocking mechanisms in the pipeline:

  • Automated assessments of code and configuration;
  • Rejection of builds that violate minimum criteria (absence of MFA, logging, exposed secrets);
  • Revalidation with each change in risk (new functionality, new integration).

3) When to validate​

SDLC phaseObjective of the validationPrimary method
Planning and definitionConfirmation of the applicability of the requirementsTechnical analysis + manual validation
DevelopmentEarly detection of non-complianceSAST + code review
TestingVerification of the expected behaviourFunctional tests + DAST
Pre-release / deliveryValidation of full complianceCross-validation + CI/CD gates
Production / operationContinuous monitoring of active requirementsRevalidation, logging, alerts

4) Validation plan by domain​

For each requirement of the canonical catalogue the following are given: the reference operational tag, the minimum level of application, the recommended validation method and the expected evidence.

Note: The operational tag uses SEC-Lx-* with Lx replaced by the project's effective level. Example: SEC-Lx-AUT-MFA → SEC-L2-AUT-MFA in an L2 project.


AUT - Authentication and Identity​

IDOperational tagLevelValidation methodExpected evidence
AUT-001SEC-Lx-AUT-MFAL2+Attempt login without a second factor. Confirm rejection and failure logs. Confirm that the accepted factors are those of the requirement. At L3, attempt the login of an administration account without WebAuthn/FIDO2 and confirm rejection.Log of failed authentication without MFA. Screenshot of the block. Configuration of the accepted factors. At L3, log of the rejection of the administrator without a phishing-resistant factor.
AUT-002SEC-Lx-AUT-PWDL1+Review the active policy. Attempt to set an invalid password. Confirm rejection.Documented policy. Error or rejection log.
AUT-003SEC-Lx-AUT-BRUTEL1+Simulate repeated failed attempts. Confirm lockout, CAPTCHA or progressive delay.Log with failure count. Evidence of lockout or delay.
AUT-004SEC-Lx-AUT-LOGOUTL1+Log out. Attempt to reuse the session or token. Confirm rejection.Log of revoked session. Authentication error on reuse.
AUT-005SEC-Lx-AUT-IDLEL1+Simulate inactivity for the configured period. Confirm expiry and redirect.Timeout log. Screenshot of automatic expiry.
AUT-006SEC-Lx-AUT-CREDL1+Validate salted hashing. Verify absence of clear-text credentials in storage and in transit.Configuration output. Scan result. Absence in the repository.
AUT-007SEC-Lx-AUT-FEDL2+Simulate federated login via SAML/OIDC. Confirm the complete flow and logging.Log of authentication via external IdP. Screenshot of successful login.
AUT-008SEC-Lx-AUT-STEPUPL2+Simulate a sensitive action. Confirm that an additional factor is required.Screenshot of step-up. Log associated with the critical action.
AUT-009SEC-Lx-AUT-CHANGEL1+Attempt to change credentials without re-authentication. Confirm the block.Log of the blocked attempt. Evidence of active session verification.
AUT-010SEC-Lx-AUT-ALERTL2+Simulate an anomalous login. Confirm notification to the user and logging.Example of the notification sent. Log of the critical event detected.
AUT-011SEC-Lx-AUT-DEFAULTL1+Verify that no default accounts or credentials are active in the application and in the components in production. Confirm that the initial credential is changed at first use.Inventory of accounts without default credentials. Evidence of the first-access flow.
AUT-012SEC-Lx-AUT-WEBAUTHNL1+ (if applicable)Replay an assertion already used, send an assertion with a foreign origin or relying party identifier and another with an invalid signature, and confirm that all are rejected. With user verification required, send an assertion without it and confirm rejection. Confirm that the server neither receives nor stores biometric data.Logs of the rejected assertions, by reason. Configuration of the WebAuthn library. Credential data schema (public key, identifier and counter only).
AUT-013SEC-Lx-AUT-RECOVERYL1+Request a recovery and confirm a single-use, expiring token, an identical response for non-existent accounts and a notification to the user. At L2+, simulate the loss of the second factor and confirm that email alone is not enough; revoke an authenticator and confirm that the associated sessions end and that it no longer authenticates.Recovery log and notification sent. Screenshot of the list of authenticators and of the revocation. Log of the sessions ended and of the assertion rejected after the revocation.

ACC - Access Control​

IDOperational tagLevelValidation methodExpected evidence
ACC-001SEC-Lx-ACC-RBACL1+Test access with a reduced-privilege role to a restricted resource. Confirm rejection.Rejection log. Documented role mapping.
ACC-002SEC-Lx-ACC-PRIVL1+Audit the permissions of user and service accounts. Confirm absence of unnecessary privileges.Permissions audit report.
ACC-003SEC-Lx-ACC-BLOCKL1+Attempt unauthorised access. Confirm the block and logging with sufficient context.Rejection log with context data.
ACC-004SEC-Lx-ACC-SEPL1+Verify effective separation of profiles. Confirm that each profile's actions are traceable.Logs with the profile identified. Cross-profile test.
ACC-005SEC-Lx-ACC-APIL1+Test endpoints without authentication/authorisation. Confirm rejection with the appropriate code.Rejection log. Automated endpoint tests.
ACC-006SEC-Lx-ACC-DATAL1+Attempt access to critical data with an unauthorised role. Confirm the block and log.Evidence of an effective control. Log of the event.
ACC-007SEC-Lx-ACC-MODELL2+Verify the existence of a reviewed and documented permissions model.Documentation of the model. Dated review record.
ACC-008SEC-Lx-ACC-REVOKEL1+Revoke access. Test immediately after revocation. Confirm failure.Log of the failed attempt after revocation. Revocation timestamp.
ACC-009SEC-Lx-ACC-ABACL3Test the access decision with distinct attributes. Confirm enforcement of the dynamic policy.Logs with attribute evaluation. Test with context variation.
ACC-010SEC-Lx-ACC-REVIEWL1+Verify the existence of a periodic review process. Confirm removal of obsolete permissions.Dated review records. Evidence of permissions clean-up.

LOG - Logging and Monitoring​

IDOperational tagLevelValidation methodExpected evidence
LOG-001SEC-Lx-LOG-EVENTSL1+Review the logging configuration. Confirm coverage of accesses, changes and critical failures.Auditable logs with events mapped by type and context.
LOG-002SEC-Lx-LOG-ATTRSL1+Analyse the log structure. Confirm the presence of who, when, what and where in each entry.Log samples with all mandatory attributes.
LOG-003SEC-Lx-LOG-INTEGL1+Attempt to modify a log on disk. Verify protection mechanisms (hash, write-once, remote syslog).Evidence of WORM, remote syslog or a tamper-detection mechanism.
LOG-004SEC-Lx-LOG-REVIEWL2+Confirm the existence of a documented and executed periodic analysis process.Dated analysis record. Documented procedure.
LOG-005SEC-Lx-LOG-RETAINL1+Verify the effective retention period against the defined policy.Retention configuration. Evidence of logs within the required period.
LOG-006SEC-Lx-LOG-CENTRALL2+Confirm forwarding to the central aggregator. Verify the forwarding configuration.Centralised view with logs per application.
LOG-007SEC-Lx-LOG-ALERTL2+Generate an anomalous event. Confirm that the alert fires with the configured threshold and channel.Log of the alert fired with timestamp and detail.
LOG-008SEC-Lx-LOG-FAILL2+Disable or block the logging system. Confirm that the failure is detected and alerted.Logging failure alert. Log of the detection.
LOG-009SEC-Lx-LOG-IRL2+Simulate an incident or forensic review. Confirm that the logs have enough detail for reconstruction.Demonstrated ability to reconstruct the event timeline.
LOG-010SEC-Lx-LOG-BIZL3Verify logging of critical business events (transactions, high-impact authorisations).Logs with business events identified and traceable.

SES - Sessions and State​

IDOperational tagLevelValidation methodExpected evidence
SES-001SEC-Lx-SES-IDLEL1+Simulate inactivity for the configured period. Confirm expiry and redirect.Timeout log. Screenshot of terminated session.
SES-002SEC-Lx-SES-LOGOUTL1+Log out. Attempt to reuse the token. Change the password and attempt to use the previous token.Authentication error on reuse. Invalidation log.
SES-003SEC-Lx-SES-ENTROPYL1+Analyse the generated tokens. Confirm adequate entropy and absence of a predictable pattern.Token analysis. Absence of predictability demonstrated.
SES-004SEC-Lx-SES-TLSL1+Intercept traffic with a proxy. Confirm that tokens only travel over TLS. Verify cookie flags.Response headers. Secure and HttpOnly flags confirmed.
SES-005SEC-Lx-SES-BINDL2+Change IP or user-agent during an active session. Confirm termination or a revalidation requirement.Log of session termination due to context change.
SES-006SEC-Lx-SES-REVOKEL1+Revoke the session via the management interface. Test immediately after revocation.Immediate authentication error. Explicit revocation log.
SES-007SEC-Lx-SES-TTLL2+Verify the configured maximum TTL. Attempt to keep the session beyond the limit.TTL configuration. Evidence of forced expiry.
SES-008SEC-Lx-SES-JWTL2+Inspect JWTs. Confirm scope and expiry claims. Test the token after revocation.Decoded JWT with correct claims. Failure after revocation.

VAL - Data Validation​

IDOperational tagLevelValidation methodExpected evidence
VAL-001SEC-Lx-VAL-INPUTL1+Review the validation code. Send invalid inputs (type, size, format). Confirm rejection.Invalid input tests. Code with validations. Rejection logs.
VAL-002SEC-Lx-VAL-WLISTL1+Attempt to send values outside the allowed list. Confirm rejection and absence of implicit handling.Code with an explicit whitelist. Tests with unexpected values.
VAL-003SEC-Lx-VAL-SCHEMAL2+Send malformed payloads or payloads with missing fields. Confirm automatic rejection.Consistent rejections. Contract tests.
VAL-004SEC-Lx-VAL-SQLIL1+Review the use of prepared statements. Run SAST and SQL injection tests.Scanner reports. Absence of concatenation in queries.
VAL-005SEC-Lx-VAL-PREUSEL1+Trace the paths between the input layer and business logic/persistence. Confirm that validation precedes internal use; identify unvalidated paths.Data-flow analysis with validation points evidenced. Code review confirms absence of unvalidated paths.
VAL-006SEC-Lx-VAL-SAFEL1+Force a validation error. Confirm that the message to the client does not expose internal logic.Generic error messages. Absence of technical detail on the client.
VAL-007SEC-Lx-VAL-AUTOL2+Run automated tests with malicious payloads (XSS, SQLi, path traversal).Execution reports. Documented case coverage.
VAL-008SEC-Lx-VAL-XSSL1+Test output on rendered surfaces (HTML, attribute, JS, SQL via prepared statements, shell, logs). Confirm correct contextual encoding.Tests with XSS/SQLi/log injection payloads. Encoding observable according to the rendering context.

Editorial note: VAL-005 covers pre-use validation of data (path input → logic/persistence; anchor ACO-IVF-004); VAL-008 covers output encoding at rendering (anchor ACO-IVF-008). The controls are complementary — input and output.


ERR - Error Handling​

IDOperational tagLevelValidation methodExpected evidence
ERR-001SEC-Lx-ERR-LEAKL1+Provoke intentional errors. Confirm that the client receives an abstract message without internal data.Generic response to the client. Separate detailed internal log.
ERR-002SEC-Lx-ERR-MSGL1+Verify all error surfaces. Confirm absence of stack traces or technical information.Screenshots of error messages in different scenarios.
ERR-003SEC-Lx-ERR-ENUML1+Test existing and non-existent resources. Confirm identical error responses (no enumeration).Identical responses for existing and non-existent resources.
ERR-004SEC-Lx-ERR-I18NL1+Verify messages in different locales. Confirm absence of executable content.Translated messages without technical or executable references.
ERR-005SEC-Lx-ERR-CENTRALL2+Review the error-handling architecture. Confirm centralisation.Code with a centralised handler. Absence of scattered ad hoc handling.
ERR-006SEC-Lx-ERR-TESTL2+Run automated tests of error scenarios. Confirm that errors are handled without leakage.Error test coverage. Execution report.
ERR-007SEC-Lx-ERR-LOGL2+Review error logs. Confirm absence of personal data, tokens or credentials.Logs without sensitive data. Pseudonymised contextual IDs.

CFG - Secure Configuration​

IDOperational tagLevelValidation methodExpected evidence
CFG-001SEC-Lx-CFG-DEBUGL1+Attempt to access debug or tracing endpoints or admin interfaces. Confirm that they are disabled or protected.403/404 response or authentication required.
CFG-002SEC-Lx-CFG-ENVL1+Verify environment separation. Confirm that deploys and tests only take place in segregated environments.Logs with the environment identified. Confirmation of segregation.
CFG-003SEC-Lx-CFG-HARDL1+Run a secrets scan on the repository and the code. Confirm absence of hardcoded secrets.Clean scan report. Absence of secrets in the history.
CFG-004SEC-Lx-CFG-EXTL1+Verify that configuration is external to the code. Confirm restrictive permissions on the configuration repository.External and versioned configuration. Audited permissions.
CFG-005SEC-Lx-CFG-STARTL2+Remove a mandatory parameter. Confirm that start-up fails with an explicit error.Start-up failure log with the cause identified.
CFG-006SEC-Lx-CFG-VAULTL2+Review secrets management. Confirm use of a vault and absence of local secrets.Vault configuration. Access policies. Absence of local secrets.
CFG-007SEC-Lx-CFG-DRIFTL3Change a critical configuration outside the normal process. Confirm detection and alert.Drift alert. Log of the unexpected change.

API - API Security​

IDOperational tagLevelValidation methodExpected evidence
API-001SEC-Lx-API-AUTHL1+Test endpoints without credentials. Confirm 401/403 rejection.Rejection logs. Automated endpoint tests.
API-002SEC-Lx-API-EXPOSEL1+Inventory the endpoints exposed in production. Confirm absence of debug or legacy endpoints.Inventory of active endpoints. Absence of unintended endpoints.
API-003SEC-Lx-API-INPUTL1+Send invalid payloads. Confirm rejection with the appropriate code.Rejection logs. Tests with malformed payloads.
API-004SEC-Lx-API-RATEL2+Execute a burst of calls. Confirm a 429 response or temporary block.Evidence of rate limiting at runtime or in logs.
API-005SEC-Lx-API-TLSL1+Verify certificates and TLS version. Confirm that security headers are active.TLS scanner. Response headers.
API-006SEC-Lx-API-DEPSL1+Verify the SBOM and documented dependencies. Confirm auditing of known vulnerabilities.SBOM. Dependency audit report.
API-007SEC-Lx-API-LOGL2+Verify logs of external calls. Confirm the presence of the essential data.Logs with origin, destination, result and timestamp.

INT - Messaging and Integrations​

IDOperational tagLevelValidation methodExpected evidence
INT-001SEC-Lx-INT-VALL1+Send a malformed message to the integration. Confirm rejection or controlled handling.Evidence of rejection. No blind processing of invalid messages.
INT-002SEC-Lx-INT-AUTHL1+Test the integration without a token or with an invalid token. Confirm rejection.Rejection log. Expired token test.
INT-003SEC-Lx-INT-TLSL1+Intercept traffic between systems. Confirm that TLS encryption is active. Verify supported versions.TLS scanner. Encrypted connection logs.
INT-004SEC-Lx-INT-PROTOL1+Attempt communication over an insecure protocol. Confirm rejection or redirect.Error or redirect to the secure protocol. Rejection log.
INT-005SEC-Lx-INT-SIGNL2+Send a message with an invalid or missing signature. Confirm rejection and log.Evidence of integrity verification. Validation failure log.
INT-006SEC-Lx-INT-ORIGINL2+Send a message from an unauthorised origin. Confirm rejection.Rejection log with the origin identified. List of authorised origins.
INT-007SEC-Lx-INT-ANOMALYL3Simulate an anomalous communication pattern. Confirm the alert.Alert fired. Log with the context of the detected pattern.
INT-008SEC-Lx-INT-REVIEWL3Verify the integration documentation and the security clauses in the contracts.Integration documentation. Contractual security clauses.

REQ - Requirements Definition​

IDOperational tagLevelValidation methodExpected evidence
REQ-001SEC-Lx-REQ-INCL1+Verify the existence of security requirements in the backlog/documentation.Requirements marked and traceable in the backlog.
REQ-002SEC-Lx-REQ-REVL1+Verify the existence of an executed and documented review process.Review record with the person responsible identified.
REQ-003SEC-Lx-REQ-RISKL1+Confirm the mapping between requirements and criticality level.Up-to-date applicability matrix.
REQ-004SEC-Lx-REQ-VERL1+Verify the change history of the project's catalogue.Active version control. History available.
REQ-005SEC-Lx-REQ-TML2+Confirm that relevant changes trigger a threat model review.Decision record associated with the change.
REQ-006SEC-Lx-REQ-TRACEL2+Verify traceability requirement → threat → test.Matrix or tool with explicit links.
REQ-007SEC-Lx-REQ-ITERL2+Confirm the existence of review cycles with the teams.Dated iterative review records.

DST - Artefact Distribution​

IDOperational tagLevelValidation methodExpected evidence
DST-001SEC-Lx-DST-REPOL1+Test access to the repository without authentication. Confirm rejection and active logs.Rejection of anonymous access. Access logs.
DST-002SEC-Lx-DST-PUBL2+Verify the approval process for public publication. Confirm documentation.Approval record. Process documentation.
DST-003SEC-Lx-DST-SIGNL2+Verify the signature or checksum of the artefacts. Confirm automated verification.Signed artefacts. Verification script or pipeline.
DST-004SEC-Lx-DST-SBOML2+Confirm generation and attachment of an SBOM per release.SBOM available and traceable per version.
DST-005SEC-Lx-DST-ACCESSL2+Verify that only authorised users and automation access production artefacts.Access policies. Permissions audit.
DST-006SEC-Lx-DST-PIPEL2+Attempt a manual deploy to production. Confirm the block.Evidence of the pipeline as the only deploy path.
DST-007SEC-Lx-DST-REVOKEL1+Verify the removal and notification process for compromised artefacts.Revocation record. Evidence of notification.

IDE - Development Tools​

IDOperational tagLevelValidation methodExpected evidence
IDE-001SEC-Lx-IDE-AUTHL1+Verify the list of authorised tools and IDEs and whether it is up to date.Maintained list. Evidence of approval of the tools in use.
IDE-002SEC-Lx-IDE-UPDL1+Verify the versions of IDEs and tools in use. Confirm that updates have been applied.Update history. Current versions documented.
IDE-003SEC-Lx-IDE-GENL2+Review samples of generated code. Confirm the existence of a review process before integration.Evidence of review of generated code. Pull request with documented review.
IDE-004SEC-Lx-IDE-EXTL1+Verify the list of installed extensions. Confirm that they come from recognised sources.List of extensions with documented origin.
IDE-005SEC-Lx-IDE-PERML2+Verify the permissions granted to extensions. Confirm that only the necessary ones are active.Reviewed permissions. Sandboxed execution confirmed.
IDE-006SEC-Lx-IDE-LOCALL2+Verify control over the use of local environments. Confirm the existence of logs or a proxy where applicable.Policy on the use of local environments. Network or proxy logs.

PRI - Personal Data (engineering)​

IDOperational tagLevelValidation methodExpected evidence
PRI-001SEC-Lx-PRI-MINL1+Compare the personal-data fields collected with the register of purposes. Confirm there are no fields without a purpose.List of fields with their associated purpose.
PRI-002SEC-Lx-PRI-RETAINL1+Check the defined periods and sample records beyond the period, including replicas and downstream systems. Confirm the declared period for backups.Retention configuration. Evidence of deletion or anonymisation by sampling.
PRI-003SEC-Lx-PRI-RIGHTSL1+Run export, rectification and deletion for a test data subject. Confirm the machine-readable format, downstream propagation and identity verification for requests outside the authenticated channel.Exported file. Log of the executions. Evidence of propagation.
PRI-004SEC-Lx-PRI-INVENTORYL2+Review the inventory. Confirm purpose, system and recipients per data set, and the record of changes.Up-to-date inventory with change history.
PRI-005SEC-Lx-PRI-LOGPIIL2+Review the PII-in-logs concept and sample logs. In immutable logs, confirm pseudonyms and per-person keys.Documented concept. Compliant log samples.
PRI-006SEC-Lx-PRI-CONSENTL1+Give and withdraw consent (or object) with a test data subject. Confirm the auditable record, equivalent effort, effect on the dependent processing and persistence after synchronisation.Consent record with the version of the text. Evidence of the effect of the withdrawal.
PRI-007SEC-Lx-PRI-DEFAULTL1+Create a new account and check the initial sharing, visibility and optional-processing settings.Screenshot or automated test of the default settings.

5) Expected results of validation​

Each validated requirement must produce:

  • Evidence of execution - report, log, validation artefact, screenshot;
  • Result - compliant / non-compliant / partial, with enough context for a decision;
  • Link to the identifier - the project's operational tag (SEC-L2-AUT-MFA) and canonical ID (AUT-001);
  • Corrective measure, where applicable - action, person responsible, deadline.

6) Continuous improvement​

Validation must be incorporated into a continuous improvement cycle, with the methods:

  • Reviewed on the basis of real incidents or findings - a recurring finding indicates a gap in the method, not only in the control;
  • Updated with new techniques or changes to the catalogue;
  • Automated whenever possible, to guarantee consistent and scalable coverage;
  • Monitored with indicators - percentage of requirements validated per release, mean time to detect non-compliance.

Cross-references​

DocumentRelationship
Base Requirements CatalogueDefines the requirements and acceptance criteria to validate
Taxonomy and TraceabilityDefines the canonical IDs and operational tags used in this document
Controls Matrix by RiskIndicates applicability by domain and risk level
Traceability and ControlsMatrix model risk → requirement → control → evidence
Exception ManagementProcess for requirements that cannot be validated or met