Findings

Demo environment
critical
2
high
6
medium
6
low
2

16 findings, ordered by the Aegis priority model. Expand any item to see the CISO judgment behind its rank.

CriticalAEG-0001

S3 bucket with PHI exports readable by any authenticated AWS principal

CISO judgment

This jumps to the top of the queue not just for severity but because it is exploitable with a single stolen key and directly triggers breach-notification law — regulatory exposure, not CVSS, sets the priority.

Business impact

A misconfigured bucket holding patient record exports is one leaked credential away from a reportable HIPAA breach, HHS OCR penalties, and mandatory patient notification for a regional hospital.

Technical detail

Bucket 'nbrh-clinical-exports' has a policy granting s3:GetObject to arn:aws:iam::*:root (any AWS account), and objects are unencrypted at rest (no SSE-KMS).

Recommended remediation

Remove the cross-account/authenticated-principal grant, enforce a bucket policy denying non-TLS access, and enable SSE-KMS with a dedicated CMK. Confirm no external access via Access Analyzer.

ProtectLow effortAWS
CriticalAEG-0002In progress

Root and admin AWS accounts without MFA

CISO judgment

Rated critical despite being 'just an identity setting' because it compounds every other AWS finding — unremediated MFA turns a medium misconfig into a full-estate compromise.

Business impact

The keys to the entire hospital cloud estate — including every PHI store — are protected only by a password, meaning one phishing hit could hand an attacker total control.

Technical detail

AWS root user has MFA disabled and 3 IAM users in the 'Administrators' group have no MFA device registered; two have active access keys.

Recommended remediation

Enforce hardware/virtual MFA on root and all admin users via SCP, rotate the exposed admin access keys, and move to federated Okta SSO with no standing IAM users.

ProtectLow effortAWS
HighAEG-0007

Publicly shared Google Drive files containing patient information

CISO judgment

I prioritize the four files owned by former employees first — data that leaves with people who no longer answer to us is the least controllable and most likely to surface later.

Business impact

Spreadsheets with patient names and appointment details are shared as 'anyone with the link,' an unmonitored leak path that would count as an impermissible HIPAA disclosure.

Technical detail

DLP scan found 11 Drive files shared link-anyone that match PHI patterns (MRN, DOB, patient name columns), 4 owned by former employees.

Recommended remediation

Revoke link-anyone sharing on flagged files, enable a Workspace DLP rule blocking external sharing of PHI patterns, and reassign orphaned files.

ProtectLow effortGoogle Workspace
HighAEG-0008

Okta admin roles granted without step-up MFA policy

CISO judgment

Identity provider admins are the crown jewels of a modern estate — I hold them to a stricter bar than production systems, because compromising them compromises everything downstream at once.

Business impact

Okta is the front door to every connected system; weak controls on its administrators mean a single compromised admin can unlock the entire environment, including PHI.

Technical detail

9 users hold Okta Super/Org Admin roles but the admin console sign-on policy does not require phishing-resistant factors; SMS is still an allowed factor.

Recommended remediation

Enforce FIDO2/WebAuthn for all admin roles, disable SMS as a factor for privileged access, and reduce Super Admin count to the minimum needed.

ProtectMedium effortOkta
HighAEG-0005

RDS instance hosting EHR data is publicly accessible

CISO judgment

Public + PHI is a combination I never leave open past the day I find it; exposure over the internet moves this ahead of internal-only misconfigs regardless of matching severity scores.

Business impact

A database backing electronic health records is reachable from the open internet, dramatically widening the attack surface for the most sensitive data the hospital holds.

Technical detail

RDS PostgreSQL instance 'nbrh-ehr-prod' has PubliclyAccessible=true and a security group allowing 5432 from 0.0.0.0/0.

Recommended remediation

Set PubliclyAccessible=false, restrict the security group to the application subnet, and place the instance behind a private endpoint only.

ProtectLow effortAWS
HighAEG-0006In progress

Hardcoded API secret committed to internal GitHub repo

CISO judgment

Secrets in git are treated as already-compromised — rotation urgency is driven by the assumption of exposure, not by whether we can prove someone read it.

Business impact

A live credential sitting in source code means anyone with repo access — including a departing engineer or a compromised laptop — can quietly reach connected systems.

Technical detail

Repo 'nbrh-integrations' contains a committed Twilio auth token and a plaintext database connection string in config/prod.env across 40+ commits of history.

Recommended remediation

Revoke and rotate the exposed secrets immediately, purge them from git history, enable push protection / secret scanning, and move secrets to AWS Secrets Manager.

ProtectMedium effortGitHub
HighAEG-0003

CloudTrail logging disabled in two active regions

CISO judgment

Detection gaps rank above many higher-CVSS config issues because a CISO knows the post-breach question is always 'what did they take?' — no logs means you must assume the worst and notify everyone.

Business impact

If a breach involving patient data occurs in these regions, the organization cannot prove scope or timeline to regulators, converting a contained incident into a worst-case 'assume-all-PHI-exposed' disclosure.

Technical detail

CloudTrail is not enabled in us-west-1 and us-east-2, both of which contain running EC2 and RDS instances; no organization-wide trail is configured.

Recommended remediation

Deploy an organization-level, multi-region CloudTrail to a locked, log-validated S3 bucket with CloudTrail Lake retention meeting the 6-year HIPAA documentation window.

DetectMedium effortAWS
HighAEG-0004

IAM access keys older than 400 days still active

CISO judgment

I weight this higher than its severity label because these keys have broad data-plane access — a stale key on a read-only role is noise, a stale key on the PHI database is a fire.

Business impact

Long-lived static credentials are the most commonly abused foothold in cloud breaches; each stale key is an unmonitored door into systems that touch patient data.

Technical detail

6 IAM access keys exceed 400 days without rotation, including 2 tied to service accounts with s3 and rds permissions.

Recommended remediation

Rotate or delete all keys older than 90 days, migrate service workloads to IAM roles/IRSA, and enforce a max-key-age guardrail.

ProtectMedium effortAWS
MediumAEG-0009

Dormant Okta accounts for terminated staff still active

CISO judgment

The five with live clinical-app assignments get handled immediately; the rest are cleanup — same finding, but the ones still touching patient apps are the real risk.

Business impact

Accounts belonging to people who have left the organization remain live, creating unaccountable access that fails both HIPAA access-management and SOC 2 offboarding expectations.

Technical detail

23 Okta accounts show no login in 90+ days, 14 of which map to HR-confirmed terminations; 5 retain application assignments to clinical apps.

Recommended remediation

Deactivate confirmed-terminated accounts today, and wire Okta lifecycle deprovisioning to the HRIS to make offboarding automatic.

IdentifyLow effortOkta
MediumAEG-0012

GitHub organization lacks branch protection and required reviews

CISO judgment

I care most about the handful of repos that deploy to patient-facing systems; branch protection on a dead internal tool is checkbox work.

Business impact

Without code review gates, a single account (or a rushed developer) can push unvetted code straight to production systems that handle patient data.

Technical detail

12 of 18 repos have no branch protection on the default branch; force-push and direct commits to main are permitted org-wide.

Recommended remediation

Enable required PR reviews, status checks, and no-force-push on default branches for all repos handling production or PHI-adjacent code.

ProtectLow effortGitHub
MediumAEG-0014

No documented, tested incident response runbook for cloud breaches

CISO judgment

Process gaps don't show up on a scanner, but this is where a manageable incident becomes a board-level crisis — I insist on it even though nothing here is technically 'broken.'

Business impact

When a PHI incident hits, the 60-day HIPAA breach-notification clock starts immediately; a team improvising its response risks missing legal deadlines and compounding the damage.

Technical detail

No current IR plan covers cloud-specific scenarios (key compromise, S3 exposure) and no tabletop exercise has been run in the last 12 months.

Recommended remediation

Adopt a cloud IR runbook mapped to the HIPAA notification timeline, assign roles, and run a tabletop this quarter.

RespondMedium effortAWS
MediumAEG-0011

Security groups allowing unrestricted SSH/RDP from the internet

CISO judgment

Standard hygiene, but I bump the jump-host instance up the list because lateral-movement pivots matter more than isolated boxes.

Business impact

Open management ports are constantly scanned and brute-forced; each one is a low-effort entry point an attacker can automate against.

Technical detail

4 security groups permit 22/tcp or 3389/tcp from 0.0.0.0/0, attached to 6 EC2 instances including a jump host.

Recommended remediation

Replace open management access with SSM Session Manager or a VPN-gated bastion, and scope any remaining rules to corporate IP ranges.

ProtectLow effortAWS
LowAEG-0015

Overly permissive IAM policies with wildcard actions

CISO judgment

Low as a class, but the CI/CD role is the exception I fix now — an over-privileged pipeline is a supply-chain incident waiting to happen.

Business impact

Broad, least-privilege-violating permissions mean any single compromised role does far more damage than it should, widening the blast radius of any incident.

Technical detail

8 IAM policies use Action:'*' or Resource:'*' patterns, including a CI/CD role with account-wide access.

Recommended remediation

Scope policies to least privilege using Access Analyzer's generated policies, starting with the CI/CD role.

ProtectMedium effortAWS
MediumAEG-0013In progress

Google Workspace lacks enforced 2SV for all users

CISO judgment

Billing and HR accounts get the enforcement deadline first — that is where the wire-fraud and W-2 phishing money actually flows.

Business impact

Email is the primary target for healthcare phishing and the entry point to most ransomware; unenforced 2-step means a large fraction of staff mailboxes rely on passwords alone.

Technical detail

2-Step Verification is enabled but not enforced; 187 active accounts have no second factor registered, including several in billing and HR.

Recommended remediation

Enforce 2SV org-wide with a short grace window, prioritizing billing, HR, and clinical-admin groups, and prefer security keys for high-risk roles.

ProtectLow effortGoogle Workspace
MediumAEG-0010

S3 bucket versioning and MFA-delete disabled on backup buckets

CISO judgment

Recovery findings rarely feel urgent until the day they are catastrophic — for a hospital that cannot afford downtime, I treat backup immutability as non-negotiable resilience, not a nice-to-have.

Business impact

Without immutable backups, a ransomware actor could encrypt or delete the hospital's recovery data, turning a survivable incident into a prolonged outage of patient-care systems.

Technical detail

Backup buckets 'nbrh-db-backups' and 'nbrh-config-backups' have versioning off and no Object Lock, so a compromised key can silently overwrite backups.

Recommended remediation

Enable versioning and S3 Object Lock (compliance mode) with a defined retention, and restrict delete permissions to a break-glass role.

RecoverMedium effortAWS
LowAEG-0016

Password policy below NIST guidance in Okta

CISO judgment

Genuinely low once phishing-resistant MFA is in place — I'd rather the team spend effort on the admin-MFA and PHI-exposure items above than gold-plate password length.

Business impact

Weak authentication baselines make credential-stuffing and guessing attacks easier across every connected app.

Technical detail

Okta default password policy allows 8-character minimums, no breached-password check, and no lockout threshold configured.

Recommended remediation

Raise minimum length to 12+, enable Okta's breached-password (HIBP) check, and set a sane lockout threshold.

ProtectLow effortOkta