sg-gov-security-testing · git:20261027.6f21efa · 2026-10-27 · sha256 7d0f0f3cfa5e7592

sg-gov-security-testing git:20261027.6f21efaA

Immutable. This exact content never changes and is served at /api/v1/blob/7d0f0f3cfa5e7592.

---
name: sg-gov-security-testing
description: >-
  Set up or audit a security testing and vulnerability management programme against the
  Singapore Government's ICT&SS Policy Reform (IM8 successor) Security Testing controls
  (ST-1..ST-5): vulnerability assessment scans, cloud security posture management, a public
  vulnerability disclosure channel (security.txt), the penetration testing / VAPT
  programme, and severity-based remediation SLAs. Use whenever preparing a Singapore
  government system for VAPT or a security audit, standing up vulnerability scanning or a
  disclosure channel, writing a vulnerability management SOP, or reviewing how a team
  triages and remediates findings. Triggers: "VAPT", penetration test / pen test for a
  government service, ICT&SS or IM8 security testing requirements, ST controls,
  vulnerability assessment scans, CSPM / cloud security posture management, security.txt,
  vulnerability disclosure programme, bug bounty readiness, vulnerability remediation SLAs,
  risk acceptance of a vulnerability, CISA KEV prioritisation, security testing audit.
---

# sg-gov-security-testing: ST controls for SG government systems

You are setting up or auditing a **security testing and vulnerability management
programme** against the ICT&SS Policy Reform **Security Testing family (ST-1..ST-5)**. The
family covers the testing lifecycle around a running system: scanning hosts for
vulnerabilities, continuously checking cloud configuration, giving the public a way to
report what they find, commissioning penetration tests, and remediating what all of those
surface within committed timeframes.

**This family depends on nine agency-defined parameters**: scan type and cadence (ST-1), the disclosure channel type (ST-3), the
testing type and frequency (ST-4), and four severity-based remediation SLAs (ST-5). The
catalog leaves all of them blank. **Get the values from the project's System
Security Plan; never invent them.** A finding of "scans are too infrequent" is only
defensible against the SSP's number.

## What this family is *not* about

ST covers the host, cloud, and programme layer. Three things are often wrongly filed
under it:

- **CI code and dependency scanning is not ST-1.** SAST (SD-4), SCA/dependency scanning
  (SD-5), secret detection (SD-6), and pipeline DAST (SD-9) live in **Secure Development
  (sg-gov-secure-pipeline)**. ST-1 is host-level vulnerability assessment of the VM, instance,
  and network layer. A repo with Dependabot and CodeQL has no ST-1 coverage; don't accept
  "we scan continuously" on that basis. Findings from those CI scanners do feed the ST-5
  remediation SLAs, in the same register and on the same clock.
- **Container image scanning is CS** (sg-gov-container-security), not ST-1.
- **Fixing an individual vulnerability is another family's work**: a SQL injection fix is
  AS-2 (sg-gov-secure-coding-as). ST-5 governs the process: triage, priority, the SLA clock,
  and who may sign a risk acceptance.

## Source and currency

Control text in this skill and `references/st-controls.md` is embedded from
**info.standards.tech.gov.sg as of 2026-07-22**; the ST family page was last updated **24
March 2026**. The standards iterate. For any compliance-critical decision, verify against
the live page:

- ST control catalog: https://info.standards.tech.gov.sg/control-catalog/cybersecurity/st/

## Reference files

- `references/st-controls.md` — full text of ST-1..ST-5 (statement, recommendations, risk,
  all nine parameters), the per-SSP level assignments, and cross-family notes. Read it when
  you need exact wording, e.g. for an audit response or SSP documentation.
- `references/programme-templates.md` — concrete artifacts per control: an RFC 9116
  security.txt, scan and CSPM enablement config, a VAPT plan and readiness checklist, the
  vulnerability register schema, and a risk-acceptance record template. Read it when
  actually building.

## Before you start: the SSP parameters

Ask for these nine values from the System Security Plan before writing anything. If the
SSP doesn't exist or leaves them blank, flag that as its own finding. The sibling skill
**sg-gov-ssp-navigator** determines which level each ST control sits at for this system.

| Control | Parameter | What the SSP defines |
|---|---|---|
| ST-1 | st-1_prm_1 | The type of vulnerability assessment scanning |
| ST-1 | st-1_prm_2 | Maximum days between vulnerability assessment scans |
| ST-3 | st-3_prm_1 | The type of public vulnerability reporting channel |
| ST-4 | st-4_prm_1 | The type of security testing programme (e.g. penetration test) |
| ST-4 | st-4_prm_2 | Maximum days between security tests |
| ST-5 | st-5_prm_1 | Days to remediate or risk-accept a **Critical** vulnerability |
| ST-5 | st-5_prm_2 | Days to remediate or risk-accept a **High** vulnerability |
| ST-5 | st-5_prm_3 | Days to remediate or risk-accept a **Medium** vulnerability |
| ST-5 | st-5_prm_4 | Days to remediate or risk-accept a **Low** vulnerability |

Level assignments vary by SSP: in the low-risk cloud/on-prem SSPs all of ST sits at Level
1; **medium-risk cloud promotes ST-1, ST-3, and ST-4 to Level 0** (mandatory, no
deviation); high-risk cloud CII puts **all five at Level 0**. Systems handling
CONFIDENTIAL data or above should assume the promoted set.

## Procedure

Work in this order. For **setup**, produce each artifact. For **audit**, verify each and
record pass / fail / not-applicable-per-SSP with evidence (the scan schedule and last
report, the CSPM console, the live security.txt, the test report and its date, the
register with its SLA clocks). Templates for every step are in
`references/programme-templates.md`.

### Stage 1 — Continuous scanning (ST-1, ST-2)

**1a. Host vulnerability assessment scans (ST-1).** Run scans of the SSP-defined type
(st-1_prm_1) for **eligible hosts** at least every **st-1_prm_2 days**. Prefer
**authenticated** (agent-based) scans; unauthenticated network scans see only what is
exposed. On cloud, use the managed scanners: Amazon Inspector or Microsoft
Defender for Cloud; on-premises, subscribe to a Vulnerability Management System (VMS).
For SaaS components you can't scan yourself, obtain the provider's prior vulnerability
scanning reports instead. Evidence is the scan schedule plus the latest report. A scanner
that's installed but hasn't run within the cadence is a fail.

**1b. Cloud security posture management (ST-2).** For cloud-hosted systems, enable CSPM
performing **continuous configuration scans** on cloud assets (AWS Security Hub, Azure
Defender for Cloud, or Google Security Command Center). This catches the
misconfiguration class (open buckets, permissive security groups, unencrypted stores)
that host scans don't. Its findings join the ST-5 register like any other source.

### Stage 2 — Public disclosure channel (ST-3)

Establish the SSP-defined public reporting channel (st-3_prm_1) for vulnerabilities in
**public-facing systems**. The catalog recommends either the **security.txt standard**
(RFC 9116: served at `/.well-known/security.txt` over HTTPS, with `Contact` and a
non-expired `Expires` no more than a year out) or a **vulnerability reporting link on all
pages**, such as in the footer. A security.txt at the wrong path, or with an expired
`Expires`, fails the RFC and defeats the channel, because researchers' tooling only looks
at that path.

### Stage 3 — The security testing programme (ST-4)

Conduct and **document** the SSP-defined testing type (st-4_prm_1, typically a
penetration test / VAPT) every **st-4_prm_2 days**, by internal teams or independent
external parties. Refer to the **WOG Security Testing Guidelines** for scoping and
methodology; a new internet-facing service should be tested **before launch**. Systems seeking the **Government Bug Bounty Programme** need a passing
**Agency Readiness Scorecard** rating first. The documentation matters: scope, rules
of engagement, findings, and the remediation retest are the audit evidence. An informal
test by the dev team leaves nothing an auditor can accept, and testers need to be
independent of the code they're testing.

### Stage 4 — Vulnerability management (ST-5)

**Triage, prioritise, then remediate or risk-accept** every finding (from ST-1 scans,
ST-2 CSPM, ST-4 tests, the ST-3 channel, and the CI scanners) within the SSP timeframe
for its severity: Critical ≤ st-5_prm_1 days, High ≤ st-5_prm_2, Medium ≤ st-5_prm_3, Low
≤ st-5_prm_4. Two rules apply:

- **Prioritise by exploitation, not just CVSS.** A vulnerability with known active
  exploitation (check **CISA's Known Exploited Vulnerabilities Catalog**) jumps the
  queue regardless of its severity label.
- **Risk acceptance requires the approving authority's consent, documented**, with the
  rationale, compensating controls, and an expiry/review date. A dev lead approving a finding
  informally is not risk acceptance; the vulnerability is still unmanaged.

Keep one register with the found-date and SLA due-date per finding so SLA breaches are
visible.

## Audit checklist

Verify each row; record evidence. "Param" marks controls whose pass criteria come from the
SSP; ask for the values rather than inventing them.

| ID | Check | Where | Param |
|---|---|---|---|
| ST-1 | Host VA scans of type st-1_prm_1, authenticated where possible, every ≤ st-1_prm_2 days; latest report within cadence; CI code scanning not counted as coverage | Scan schedule + latest report | ✓ |
| ST-2 | CSPM with continuous configuration scans enabled on all cloud assets (Security Hub / Defender for Cloud / SCC) | CSPM console / config | |
| ST-3 | Public reporting channel of type st-3_prm_1 live: security.txt at /.well-known/ over HTTPS with valid unexpired Expires, or a reporting link on all pages | Live URL / page footer | ✓ |
| ST-4 | Documented st-4_prm_1 every ≤ st-4_prm_2 days by internal teams or independent external parties; scope, RoE, findings, retest on record; pre-launch test for new public services | Test report + date | ✓ |
| ST-5 | All finding sources in one register; triage + prioritisation (incl. KEV/active exploitation); remediation or documented approving-authority risk acceptance within the four severity SLAs | Register + acceptance records | ✓ |

Report per control ID with pass / fail / not-applicable-per-SSP, the evidence found, and,
for failures, the fix from `references/programme-templates.md`. Where a pass depends on an
SSP parameter that isn't stated, ask for the value; don't guess a cadence or SLA.

## Related skills in this repo

- **sg-gov-ssp-navigator** — decides which SSP applies and at which level each ST control sits
  (all-Level-1 in low-risk plans; ST-1/ST-3/ST-4 promoted to Level 0 in medium-risk cloud;
  all five at Level 0 for high-risk CII). Use it before declaring any ST control out of
  scope.
- **sg-gov-secure-pipeline** — SD/SC: SAST (SD-4), dependency scanning (SD-5), secret detection
  (SD-6), and pipeline DAST (SD-9) live there, not under ST-1, but their findings feed
  the ST-5 register and SLAs.
- **sg-gov-container-security** — CS: image scanning and registry hygiene for containerised
  workloads; pair it with ST-1 host scans rather than substituting one for the other.
- **sg-gov-secure-coding-as** — AS/CK: where the fixes for application-layer findings land
  once ST-4 or the ST-3 channel surfaces them.
- **sg-gov-logging-monitoring** — LM's runtime threat detection (LM-9) complements ST-2's
  continuous configuration/posture scanning; neither replaces the other.
- **sg-gov-network-security** — the NS posture (segmentation, deny-by-default, edge filtering)
  is what ST-1 host scans, ST-2 CSPM, and a network VAPT exercise from the outside;
  their findings land in the ST-5 register with NS fixes.