Two Hundred Findings and a Thursday Change Board
You are auditing 60 Ubuntu 20.04 application servers for a payment processor. Your authenticated CIS-style script returns 214 findings, including: 41 hosts with PermitRootLogin yes in /etc/ssh/sshd_config; 55 hosts with NOPASSWD sudo for the group deploy; 12 hosts running a kernel with a known local privilege-escalation CVE; 7 hosts that are still reachable on the network but whose CMDB record says decommissioned six months ago; and 3 hosts with a world-readable shadow file. Your contact wants 'a prioritized list I can take to the change board on Thursday'. All 41 root-login hosts sit in the cardholder-data environment, reachable only through a jump host with MFA. The 12 unpatched-kernel hosts are in the dev VLAN. Nobody has ever scanned the 7 decommissioned hosts.
1. Which single finding do you put at the top, and why?
Read the worked answer
The 7 decommissioned-but-reachable hosts - unless any of them sits in the card data environment, in which case they are #1 for both risk and compliance.
Reasoning by (exploitability x blast radius x detectability):
- Root login on 41 hosts is highly exploitable only if an attacker is already past the MFA jump host - and that jump host is a compensating control that genuinely reduces likelihood. Still a PCI requirement breach, but a known, owned, monitored gap.
- NOPASSWD sudo for
deploymatters only if the group is populated with interactive accounts and the command list is unrestricted - check before scoring it. - Unpatched kernels in dev are low blast radius unless dev credentials reach prod - check for shared keys and trust relationships before accepting that boundary.
- The 7 hosts are the only finding that is unowned. Nobody patches them, nobody monitors them, they are outside change control and outside every scan, and they almost certainly still hold domain-joined machine accounts, SSH keys, and old application secrets. An intruder there is invisible. That is the definition of an uncontrolled risk.
First action item, not a scan finding: 'Identify owner of 7 reachable-but-decommissioned hosts; power off or rebuild within 5 business days.'
2. Three of your headline findings could be false positives. How do you validate before the change board?
Read the worked answer
Check effective configuration, not text in a file.
PermitRootLogin yes:sshd_configis evaluated top-down withMatchblocks that override earlier directives. Runsshd -T | grep -i permitrootlogin(andsshd -T -C user=x,host=y,addr=zfor match-specific cases) to get the value sshd actually applies. Also confirmAllowUsers/DenyUsersand whether root has a usable password hash at all -PermitRootLogin yeswithprohibit-passwordsemantics and a locked root account is a documentation finding, not a live exposure.- NOPASSWD sudo for
deploy: check group membership and the sudoers command list. Ifdeployhas zero interactive logins and sudo is restricted to three restart commands, the finding is downgraded. - World-readable
/etc/shadow: verify on the host, not from the script cache -stat -c '%a %U:%G' /etc/shadow. Re-check a sample of three hosts manually before claiming all three.
Rule: anything you put in front of a change board must be reproducible with one command the server team can run themselves.
3. How do you turn 214 findings into something a change board can act on in 48 hours?
Read the worked answer
Collapse by control, then rank by risk, then attach effort. A 214-row spreadsheet gets deferred; five change packages get scheduled.
Structure:
- One line per control theme, with count and percentage: 'SSH root login permitted - 41/60 hosts (68%) - PCI 2.2.7 - fix: config template + rolling restart - effort: 2 engineer-days - risk: low outage, restart only.'
- Rank by risk, not by count. The 7 unowned hosts outrank 41 root-login configs even though it is one seventh the number.
- State compensating controls explicitly in the same cell as the risk. Root login behind an MFA jump host with no internet exposure is still a finding - it is a PCI violation - but pretending it is tonight's emergency destroys your credibility on the 7 hosts that are.
- Give each package a verification step the client can run to close the ticket.
- Separate 'decision needed' from 'work needed.' Only two items need the board to decide anything: decommission date for the 7, and a maintenance window for the 12 kernel patches. The rest is execution.
Bring one page, five rows, and the raw 214 as an appendix.