Feb 2026 Cybersecurity / Competition

International CDC Feb 2026

5th Place
International CDC
Out of 42 teams — Top 12%
5 Servers
Live Infrastructure
Public transportation scenario
Blue Team
Defense Role
AD lead + incident reporting
7 CVEs
Attack Vectors
Hunted and remediated
01

Competition Overview

Drake University's Cyber Club placed 5th out of 42 teams at the International Cyber Defense Competition (ICDC) 2026, hosted at Iowa State University — competing against teams from the US, Kosovo, North Macedonia, and Albania.

The scenario: our blue team inherited a live network running a fictional city's public transportation system. Five servers, real services, and a red team that had already been in the environment before the clock started. Red team (Tom Pohl and Jared Brees) had pre-planted persistence mechanisms throughout the infrastructure — our job was to find them, close them, and keep services online while being actively attacked.

The arc that led here: October 2024 national competition, first attempt, bottom of the field. December 2025 national CDC, 2nd place out of 20 teams. Spring 2026 ICDC, 5th out of 42 internationally.

02

My Role

Active Directory Security

Owned all AD-related security: Kerberos encryption upgrades (RC4 to AES-256), Group Policy enforcement, auditing policy across the domain, and hunting certificate template misconfigurations (AD CS ESC1).

Domain Controller Hardening

Locked down RDP with NLA, disabled insecure legacy protocols, enforced SMB signing, and implemented LDAP channel binding to block pass-the-hash and relay attacks. Addressed the unauthenticated /register endpoint auto-enrolling accounts to Domain Admin.

OPNsense Real-Time Filtering

Managed firewall rules and live traffic analysis in OPNsense to cut off red team lateral movement and block active exploit traffic — while keeping competition-scored services reachable.

Malware Hunting

Detected a Kerberos Keystealer on the DC, a runtimebroker.exe impersonator, an LD_PRELOAD rootkit masquerading as a system library on the web server, and pre-planted netcat listeners. All found through manual inspection — automated tooling missed them.

Incident Reporting

Filed detailed incident reports for each red team attack discovered, documenting the exploit used, affected services, indicators of compromise, and remediation steps taken — required by competition rules for scoring credit.

Privilege Separation

Established least-privilege role separation for CEO, IT Admin, and HR accounts through Group Policy. Standard users locked out of admin functions; admin accounts restricted to specific workstations.

03

Technical Challenges

ZeroLogon — Unpatchable by Competition Rules

The red team used ZeroLogon (CVE-2020-1472) against Active Directory. Competition rules prohibited patching the domain controller, leaving the vulnerability open the entire match — so the only play was detection and response, not prevention.

Response. Enabled verbose DC audit logging to catch Netlogon channel abuse in real time. Monitored for anomalous machine account password resets, documented each attempt in incident reports as required for scoring credit, and isolated affected accounts immediately.

PwnKit (CVE-2021-4034) on Linux Hosts

Red team exploited PwnKit — a privilege escalation vulnerability in Polkit's pkexec — to gain root on Linux servers. The exploit is reliable, requires no special conditions, and works across a wide range of Linux distributions.

Fix. Patched polkit packages on all Linux hosts immediately. Verified pkexec binary permissions and audited SUID binaries across the environment. Monitored for unexpected root-level process spawns as an indicator of residual exploitation.

LD_PRELOAD Rootkit Disguised as a System Library

The web server had an LD_PRELOAD rootkit hiding as a legitimate-looking shared library. It intercepts standard libc calls to hide processes, files, and network connections — making the compromised host look clean to standard inspection tools.

Fix. Cross-referenced /etc/ld.so.preload and environment variables against known-good library paths. Found the injected library by comparing running process maps to expected system libraries. Removed the rootkit, cleared LD_PRELOAD references, and verified no persistence hooks remained.

Flask Default SECRET_KEY — Admin Session Forgery

The web application was running with Flask's default SECRET_KEY set to 'cdc'. With a known signing key, any attacker can forge a valid session cookie with admin privileges — no credentials required.

Fix. Rotated the SECRET_KEY to a cryptographically random value, invalidating all existing sessions including any the red team had forged. Audited remaining Flask configuration for other insecure defaults and disabled debug mode.

Unauthenticated /register → Instant Domain Admin

An exposed /register endpoint required no authentication and automatically enrolled new accounts into the Domain Admin group. Red team could create a privileged AD account from a single unauthenticated HTTP request.

Fix. Took the endpoint offline immediately, removed auto-enrollment logic, and audited AD for any rogue accounts already created. Implemented strict authentication requirements before re-enabling registration functionality.

AD CS ESC1 — Certificate Template Abuse

Active Directory Certificate Services was misconfigured with an ESC1-vulnerable template: any authenticated user could request a certificate for an arbitrary UPN, enabling credential dumping and domain privilege escalation without touching Kerberos directly.

Fix. Identified vulnerable templates using manual enumeration, revoked outstanding certificates issued under the misconfigured template, and corrected the enrollment permissions and subject name settings to require CA manager approval for sensitive UPN requests.

Pre-Planted Netcat Backdoor Listeners

Red team had pre-planted netcat listeners on multiple hosts before the competition started. The listeners provided persistent reverse shell access independent of any other exploit — even after other persistence mechanisms were removed.

Fix. Audited all listening ports with ss -tlnp and netstat, cross-referenced against expected services, and killed unauthorized listeners. Added OPNsense rules to block unexpected outbound connections. Checked cron, systemd units, and shell profiles for re-spawn hooks.

04

Lessons Learned

ICDC 2026 taught more about real adversary tradecraft in one afternoon than any course or lab. The red team had been inside the environment before we even touched a keyboard.

01

Pre-planted persistence is the first thing to hunt, not the last. Assuming a clean starting state is wrong. Check LD_PRELOAD, netcat listeners, scheduled tasks, and AD for rogue accounts before doing anything else.

02

Default credentials and configurations are immediate critical findings. Flask's SECRET_KEY='cdc' and an unauthenticated /register → Domain Admin endpoint were both trivially discoverable. Audit application config files within the first minutes.

03

Some vulnerabilities can't be patched — response and detection are the only options. ZeroLogon stayed open by competition rules. The lesson: build detection capability for known CVEs even when the patch is off the table.

04

AD CS is an overlooked attack surface. ESC1 template abuse is quiet, legitimate-looking, and gives credential-level access without touching Kerberos. Certificate Services enumeration now goes on the first-five-minutes checklist.

05

Rootkits hide from the tools you'd normally use to find them. Catching the LD_PRELOAD rootkit required going back to first principles — reading raw file paths, comparing library maps, and trusting manual inspection over tool output.

05

Team

Teammates

Coleman Pagac, Jordan Martin, Nick Guyette, Haris Mehuljic, Josh Pohl, Maddie Phillips, and Liam Schultz.

Faculty Advisors

Prof. Tim Urness and Prof. John Notch — Drake University faculty who supported the team through the national and international competition seasons.