Skip to content
Back to Articles

948 Paths to Root in 30 Hours: What OpenAI's AI Exploit Pipeline Means for Linux Servers

Share:

On November 4, 2026, OpenAI published the results of an experiment: it pointed a multi-stage pipeline of AI agents at the Linux kernel and let it run. According to the company, about 30 hours later the pipeline had produced 1,169 working local privilege escalation (LPE) exploits. After variant analysis, these came down to 948 distinct vulnerabilities. Each one gives an unprivileged local user a path to root.

The headline number is easy to misread. 948 is not a count of merged kernel patches, and it does not mean that 948 new CVEs land on your servers tomorrow. It does mean that finding kernel bugs, and turning them into exploits, now costs much less than it did a year ago. If you run Linux servers, especially servers where other people run code, that change matters more than any single bug.

This article sums up what was reported, what was not reported, and what a server owner can check today. The sources are listed at the end.

🤖 What the pipeline did

OpenAI described a staged process. An unnamed, upcoming cyber model did the work in a run in mid-October 2026. As reported, the stages were:

  1. Scouting. Agents picked 5,034 audit targets, about 2.8 million lines of code or roughly 7% of the kernel. Each target was chosen because a low-privileged user can reach it.
  2. Analysis. Analyst agents produced 2,308 deduplicated bug candidates in about 12 hours.
  3. Triage. Agents wrote proof-of-concept code and ran it in virtual machines on a KASAN-instrumented kernel. KASAN is the kernel's memory error detector.
  4. Dynamic validation. 1,724 candidates reproduced within the 30-hour window.
  5. Exploit development. This stage produced 291 information-leak PoCs and 1,169 working LPE exploits.
  6. Variant analysis. Exploits that shared a root cause were merged, leaving 948 distinct LPE vulnerabilities.
  7. Patching and review. The pipeline wrote a candidate patch for each bug. Humans reviewed the results before anything went to kernel maintainers.

Each finding came as one bundle: a root-cause analysis, a minimal PoC, a candidate patch and a working exploit. That is roughly what a maintainer needs to understand and fix a bug, and also roughly what an attacker needs to use one.

🛡️ The mitigations were on

Exploit counts from lab kernels with hardening disabled don't mean much. OpenAI said the test VMs ran a stock desktop operating system with the usual kernel mitigations enabled: SMEP, SMAP, KASLR and HARDENED_USERCOPY. In other words, the exploits had to work around the defenses that real servers rely on.

In a sample of 166 exploits, OpenAI counted 10 novel exploitation techniques. It named some of them in broad terms: persistent elastic objects, page grooming, data-only privilege escalation and arbitrary type confusion. It withheld the details. Data-only attacks deserve attention because they change kernel data instead of hijacking control flow, and several common mitigations are built to stop control-flow hijacking.

💸 What it cost

The run used about $1.21 million in API credits, around $1,279 per LPE. Coverage of the post calls these upper bounds. For comparison, OpenAI's earlier run in July 2026 reportedly found 166 LPEs for about $513,690. The new run found more than five times as many bugs for roughly 2.4 times the money.

OpenAI also gave a hypothetical market value of $18.9M to $66.3M, based on public exploit competition payouts. Nobody earned that money. It is an estimate of what the same bugs might be worth on the open market. In a separate kernelCTF exercise, the pipeline reportedly found 21 LPEs and 25 leaks in 112 hours for about $32,936.

Whatever you think of the exact figures, the trend is clear. A working kernel LPE used to take a skilled researcher weeks. In this run it cost about as much as a good laptop.

🧪 The pipeline needed checks too

One detail from the report is useful for anyone who validates findings, human or machine. In an early run, about 20 of 200 reported "successes" did reach root, but through a different zero-day than the bug the agent claimed to exploit. The agent got root and reported the wrong reason. OpenAI responded by adding independent checks that confirm which path an exploit actually takes.

Coverage also notes that early candidate patches had quality problems. That is why human review sits between the pipeline and the maintainers.

🩹 Where the fixes stand

OpenAI says it is disclosing the bugs through its Patch the Planet partners and has already sent hundreds of reports. Per the reporting available on publication day:

  • 61 of the vulnerabilities are already patched upstream.
  • 43 have patches in staging.
  • 299 have been publicly reported or discussed.
  • The rest are going through review and coordinated disclosure.

The candidate patches are proposals until maintainers accept them. None of the sources we read listed kernel versions, affected subsystems, CVE identifiers or bug classes. So there is no list to check your servers against yet, and no single setting that blocks all 948. Be wary of any blog or tool that claims to have one.

🖥️ What this means for server owners

A local privilege escalation needs local code execution first. On a single-purpose server that only you can log in to, an LPE is the second step of an attack, not the first. On many real servers, the first step is cheap:

  • Shared hosting. Every account can run PHP, cron jobs and often a shell. A kernel LPE turns one compromised account into root over all of them.
  • Hacked websites. A web shell dropped through a vulnerable plugin runs as the site user. Today that user is usually the limit of the damage. With a reliable kernel LPE, the attacker can take the whole server.
  • Containers. Containers share the host kernel. A kernel LPE inside a container is often a container escape.
  • CI runners and build hosts. They run untrusted code by design.

This is the part that matters for website cleanup work. Most compromised sites we see stop at the site user. If kernel LPEs become cheap, the gap between "a site was hacked" and "the server was rooted" gets smaller, and a stale kernel becomes the main thing that keeps one from turning into the other.

🔎 Read-only checks you can run today

These checks are our own general practice, not advice from the sources. They are all read-only. Run them as root or with sudo.

1. Is the running kernel the one you installed? Updating the kernel package does nothing until you reboot. This is the most common gap we find.

# Running kernel and uptime
uname -r
uptime -p

# Installed kernels (RHEL family)
rpm -q kernel --last 2>/dev/null | head -5

# Installed kernels (Debian/Ubuntu)
dpkg -l 'linux-image-*' 2>/dev/null | awk '/^ii/{print $2, $3}'

2. Does the system say it needs a reboot?

# RHEL family (dnf-utils / yum-utils)
needs-restarting -r 2>/dev/null

# Debian/Ubuntu
cat /var/run/reboot-required 2>/dev/null
cat /var/run/reboot-required.pkgs 2>/dev/null

3. Are kernel updates waiting?

# RHEL family
dnf -q check-update 'kernel*' 2>/dev/null

# Debian/Ubuntu (uses the current package lists, does not refresh them)
apt list --upgradable 2>/dev/null | grep -E '^linux-(image|headers|generic)'

4. How much kernel surface is open to unprivileged users? The pipeline chose its targets by what a low-privileged user can reach. Unprivileged user namespaces and unprivileged eBPF have been common LPE entry points in recent years. Some workloads need them, such as rootless containers and some browsers and sandboxes. Look before you change anything.

# Unprivileged user namespaces
sysctl user.max_user_namespaces 2>/dev/null
sysctl kernel.unprivileged_userns_clone 2>/dev/null   # Debian/Ubuntu only

# Unprivileged eBPF (1 or 2 = disabled for unprivileged users)
sysctl kernel.unprivileged_bpf_disabled 2>/dev/null

# Kernel pointer and log exposure (helps against info leaks)
sysctl kernel.kptr_restrict kernel.dmesg_restrict kernel.perf_event_paranoid 2>/dev/null

5. Who can run code on this box? Every account that can run code is a possible starting point for an LPE.

# Accounts with a real login shell
awk -F: '$7 !~ /(nologin|false)$/ {print $1, $7}' /etc/passwd

# Users with crontabs (path differs by distro)
ls -1 /var/spool/cron/ /var/spool/cron/crontabs/ 2>/dev/null

🧭 What to do with the results

  • Close the reboot gap. Plan a regular reboot window so that installed kernel updates actually run. A server with 400 days of uptime is running a 400-day-old kernel, whatever the package list says.
  • Follow your distribution's kernel advisories. The fixes will reach you as distribution kernel updates, not as 948 separate announcements. Expect a busy few months of kernel updates.
  • Reduce the starting points. Give shell access only to the accounts that need it, keep PHP and other site code isolated per account, and treat every web shell found on a shared server as a possible server-level incident.
  • Change sysctls only with a test. Turning off unprivileged user namespaces can break containers, sandboxes and some applications. Test on a non-production host first.
  • Keep scanning for the first step. Malware scanning and cleanup of the websites on a server stay the front line, because they remove the local foothold that an LPE needs.

💡 Takeaways for defenders

  • The cost of finding kernel bugs has dropped sharply. Plan as if attackers will have similar tools, because some of them will.
  • 948 is a disclosure pipeline, not a patch count. Most fixes are still on their way. Watch your distribution, not the headline.
  • Mitigations raise the cost but don't stop exploitation. These exploits worked with SMEP, SMAP, KASLR and HARDENED_USERCOPY enabled.
  • On a shared server, one hacked site can mean root. A local foothold plus a cheap LPE is the whole attack.
  • Validate the path, not just the result. The pipeline's own wrong-zero-day problem applies to every exploit and every incident report.

❓ FAQ

Are my servers vulnerable to all 948 bugs?

Nobody can say yet. The public reporting does not list affected kernel versions, subsystems or CVEs. Some bugs will only affect certain versions or configurations. The safe assumption is that a kernel that has not been updated and rebooted recently is affected by some of them.

Can these exploits be used remotely?

They are local privilege escalations. An attacker needs to run code on the machine first, for example through a hacked website, a stolen SSH login or a malicious container. On shared servers, that first step is often easy.

Has OpenAI released the exploits?

No. OpenAI says it reports the bugs to kernel maintainers through coordinated disclosure, and it withheld technical details of the new exploitation techniques.

Is there a single setting that protects against all of them?

No. Limiting unprivileged user namespaces and eBPF reduces the attack surface, but the only real fix is a patched kernel that is actually running. That means installing the update and rebooting.

Does this affect WordPress or other CMS sites directly?

Not directly. The bugs are in the Linux kernel, not in web applications. They raise the stakes of a site compromise, because a web shell running as the site user becomes a possible way to get root on the whole server.

📚 Sources

All figures come from these sources as published on November 4–5, 2026. The checks and recommendations above are our own general practice.