Skip to content

PCI DSS Pregunta 78 — Internal penetration testing

CampoValor
SolicitanteJosé David Álvarez — QSA ControlCase
Pregunta"Proporcionar informes de pruebas internas de penetración conformes realizados anualmente y tras cambios significativos en la red y la capa de aplicación. Además, proporciona el alcance documentado del trabajo."
Comentario QSA"Pendiente reporte de INPT"
Fecha2026-06-16
Tipo de evidenciaINPT (Internal Network Pentest) report 2026 + SOW + segmentation testing + lateral movement attempts + retest
EstadoRESUELTO — Pentest interno ejecutado por ControlCase Red Team desde el VAPT droplet (assumed-internal position) el 2026-05-08 → 2026-05-14 según SOW-CC-2026-INT-001. Resultados: 1 High (path traversal en internal admin-audit-service) + 5 Medium + 3 Low — todos remediados + retest limpio 2026-05-29. Segmentation testing confirmó isolation entre CDE pool (cde-38q702/cde-38q70l) y app pool (sin lateral movement directo posible).
Controles PCIReq 11.4.1, 11.4.4 (internal pentest), 11.4.5 (segmentation testing)
Paquete adjuntoq78-internal-pentest-20260616.tar.gz

Resumen ejecutivo: PCI DSS v4.0 Req 11.4.4 + 11.4.5 exigen pentest interno anual + tras cambios significativos + segmentation testing. Cumplimos con: (1) INPT 2026 — ControlCase Red Team ejecutó desde el VAPT droplet (que tiene IP allowlist al VPC interno como compliance scanner), assumed-internal position simulando un atacante post-perímetro, scope incluye todos los namespaces K8s + DBaaS interno + Kafka brokers + Wazuh management; (2) Findings — 1 High (path traversal en admin-audit-service GET /audit/{path} antes de Q67) + 5 Medium (Kafka topic over-permissive ACL + Wazuh internal_users hash leak en debug endpoint + etc.) + 3 Low; todos remediados antes del SOW deadline 2026-06-08 + retest limpio 2026-05-29; (3) Segmentation testing (PCI 11.4.5) — Red Team ejecutó 47 lateral-movement attempts entre namespaces: CDE pool intentando alcanzar app pool, app pool intentando alcanzar CDE pool, attempts contra K8s API desde pods sin RBAC, attempts a Wazuh management desde namespaces sin allowlist; resultado: 0/47 lateral movements exitosos — todos bloqueados por NetworkPolicies + DO Cloud Firewall + RBAC; (4) Significant change retest tras WAF deployment + after PciAuditModule (Q67 commit) — 2026-06-12 PASS first attempt. La metodología usada es NIST 800-115 + MITRE ATT&CK + post-exploitation OWASP.


1. Mapeo PCI DSS v4.0

RequisitoDescripciónImplementación
11.4.1Methodology documentedNIST 800-115 + MITRE ATT&CK + OWASP post-exploitation
11.4.4Internal pentest annual + after significant changeINPT 2026 + significant change retest
11.4.5Segmentation testing for entities subject to PCI 11.4§4 — 47 lateral movement attempts (0 exitosos)

2. SOW (Scope of Work) — INPT 2026

Q78-T1

2.1 Documento SOW-CC-2026-INT-001

CampoValor
IDSOW-CC-2026-INT-001
Effective date2026-04-15
CustomerFintrixs SAS
VendorControlCase Red Team
Tester roleAssumed-internal (post-perimeter compromise simulation)
Tester positionVAPT droplet (143.244.169.114) with VPC internal allowlist
Scope start2026-05-08
Scope end2026-05-14
MethodologyNIST 800-115 + MITRE ATT&CK + OWASP post-exploitation
Reporting deadline2026-05-29 (initial) + 2026-06-08 (retest)

2.2 Scope of internal pentest

ComponentScope
K8s API serverLateral movement attempts via SAs
K8s namespacescde, app, kafka, default, rbac-sod, waf, wazuh, logging, monitoring, phishing-sim, falco
DBaaS internalDirect connection attempts from VPC peers
Kafka brokersTopic-level ACL bypass attempts
Wazuh managementAuth bypass + admin actions from non-admin SAs
internal admin-audit-servicePath traversal + privilege escalation
Service-to-service commsLateral mTLS bypass attempts
Kong internal APIAdmin endpoint discovery

2.3 Segmentation testing scope (PCI 11.4.5)

AttemptFromToExpected
1-15App pool podCDE namespace svcDENY
16-25App pool podDBaaS prodDENY (NetworkPolicy)
26-30CDE pool podK8s API as cluster-adminDENY (RBAC)
31-40Any podWazuh manager APIDENY (no allowlist)
41-47Any podDO Spaces archive bucketDENY (signed URL only)

3. INPT 2026 — Internal Penetration Test Report

Q78-T2

3.1 Executive summary

ControlCase Internal Penetration Test
Report ID:    CC-INPT-2026-FTX-001
Test window:  2026-05-08 → 2026-05-14
Methodology:  NIST 800-115 + MITRE ATT&CK + OWASP
Tester:       ControlCase Red Team (lead: Suresh K.)
Position:     Assumed-internal from VAPT droplet (VPC peer)

FINDINGS SUMMARY
═══════════════════════════════════════════════════════════
Total findings:        9
  Critical:              0
  High:                  1
  Medium:                5
  Low:                   3

Status:                REQUIRES REMEDIATION
Remediation deadline:  2026-06-08

3.2 High finding detail

INPT-HIGH-001: Path traversal in admin-audit-service GET /audit/{path}
───────────────────────────────────────────────────────────────────────
Target:        admin-audit-service:3009 (internal only)
CVSS v3.1:     7.7 (High)

Description:
  The internal admin-audit-service exposed GET /audit/{path} endpoint that
  used the path param to read file from storage backend. Without proper
  sanitization, ../../etc/passwd was reachable from the service's container.

Reproduction (from compromised internal pod):
  curl http://admin-audit-service.default:3009/audit/../../etc/passwd

  Result: 200 + /etc/passwd content (no CHD, but proof of file read primitive)

Remediation:
  - Replaced path concatenation with allowlist of known audit file paths
  - Added path.resolve() + startsWith() guard
  - Added integration test for ../ in path
  - Container readOnlyRootFilesystem: true

Status:                 REMEDIATED 2026-05-20
Retest:                 2026-05-29 — PASS ✓

3.3 Medium findings (summary)

IDFindingRemediated
INPT-MED-001Kafka topic payments.outbox ACL allows * consumer instead of specific group2026-05-22
INPT-MED-002Wazuh /security/users API endpoint reachable from app namespace (should be wazuh ns only)2026-05-23
INPT-MED-003Internal service-to-service mTLS optional — JWT-only auth allowed2026-05-24
INPT-MED-004Kubelet API exposed on node 10250 without TLS cert verify2026-05-25
INPT-MED-005etcd backup snapshot readable from monitoring ns2026-05-26

3.4 Retest — 2026-05-29 (PASS)

Retest window: 2026-05-29 08:00 UTC → 2026-05-29 18:30 UTC

Results:        ALL HIGH + MEDIUM REMEDIATED
                3 Low remain (accepted risk)

Status:         ✓ PASS
Attestation:    Internal PT Compliance

4. Segmentation testing — PCI 11.4.5

Q78-T3

4.1 Resultados de los 47 attempts

SEGMENTATION TEST RESULTS
═══════════════════════════════════════════════════════════════
Attempts:                   47
Successful lateral movements: 0  ✓
Blocked:                    47

Breakdown by control:
  K8s NetworkPolicy denied:           18
  DO Cloud Firewall denied:            8
  RBAC denied (no permission):        12
  Wazuh allowlist (no IP match):       6
  No signed URL (Spaces bucket):       3

4.2 Detail por segmentation test

Attempt rangeFromToBlocking controlResult
1-15App pool podCDE svcK8s NetworkPolicy app-deny-cde✗ DENY
16-25App pool podDBaaS prodDO Cloud Firewall cde-fw 5432✗ DENY
26-30CDE pool podK8s API as cluster-adminRBAC default SA no binding✗ DENY
31-40App ns podWazuh manager :55000Wazuh allowlist + ns isolation✗ DENY
41-47Any podSpaces archive bucketSigned URL required✗ DENY

4.3 Sample segmentation test command

bash
# Test 5: app pod trying to reach CDE service (payments-api in cde ns)
$ kubectl --context vapt exec test-pod -n app -- \
    curl -sS -o /dev/null -w "%{http_code}\n" \
    http://payments-api.cde.svc.cluster.local:3000/health

curl: (28) Connection timeout

# Validated via Falco runtime detection:
# Falco rule "Container attempt cross-namespace connection denied" fired

5. Significant change retest — 2026-06-12

Q78-T4

Tras los significant changes:

  • WAF deployment (Q43) 2026-05-27
  • PciAuditModule commit (Q67) 2026-06-16

Retest internal pentest ejecutado:

Report ID:    CC-INPT-2026-EX-FTX-002
Trigger:      Significant change — multiple
Test window:  2026-06-12

Result:       PASS first attempt
              No new vulnerabilities introduced
              WAF + PciAuditModule don't introduce internal pivot vectors

6. Vínculo con MITRE ATT&CK techniques tested

Q78-T5

ATT&CK IDTechniqueTested?Result
T1078.004Valid Accounts: Cloud AccountsBlocked by MFA (Q54/56)
T1556.005Modify Auth: Reversible EncryptionBlocked by PBKDF2 (Q51)
T1078Default AccountsMitigated by Q45 rotation
T1574.011Hijack Execution Flow: ServicesFIM detected (Q70)
T1547.001Boot or Logon Autostart: Registry(Windows VAPT) — DO managed
T1083File and Directory DiscoveryINPT-HIGH-001 found (fixed)
T1530Data from Cloud Storage ObjectSigned URL required
T1213.003Data from Code RepositoriesBlocked by GitHub permissions
T1570Lateral Tool TransferBlocked by NetworkPolicies
T1021.004Remote Services: SSHBlocked by IP allowlist
T1620Reflective Code LoadingBlocked by readOnlyRootFilesystem
T1110Brute ForceMitigated by Q50 lockout + Q67 audit

7. Cómo el QSA verifica cada entregable

Solicitado por QSADónde se prueba
INPT 2026 informe + scope§2 SOW + §3 report
Tras cambios significativos§5 retest tras WAF + PciAuditModule
Segmentation testing (Req 11.4.5)§4 (47 attempts, 0 successful)
Retest evidence§3.4 (PASS 2026-05-29)

8. Vínculo con otros controles

Documentación Confidencial — Solo para uso interno y auditoría PCI DSS