Apache httpd CVE-2021-44790: The RCE After Log4Shell

📋 Key Takeaways
  • What happened
  • How it worked
  • Impact and numbers
  • Timeline
  • Why it still matters in 2026
7 min read · 1,312 words
Educational & Ethical Use Only — This article is provided for educational and ethical cybersecurity research purposes only. The techniques described should only be used on systems you own or have explicit permission to test. Always follow responsible disclosure and the laws applicable to you. Mitigations are included so engineers can harden real systems.

One week after Log4Shell detonated across the Java world, Apache httpd delivered its own December surprise: CVE-2021-44790, a potential buffer overflow leading to remote code execution in the mod_lua multipart-handling path of the world’s most-deployed web server. Announced 20 December 2021 alongside the less-severe CVE-2021-44791 (merge-caching NULL-pointer read in mod_session), the vulnerability triggered immediate global attention — less because of mod_lua’s reach (the module is rarely enabled; processing multipart bodies with it rarer still) than because of timing: defenders were already at maximum Log4Shell fatigue, and any web-server RCE advisory in that window was guaranteed planetary triage. The practical exposure proved narrow, but the episode earned its place in 2021’s record: a case study in where an advisory lands versus where the risk actually is, and a reminder that “unlikely module + unusual request shape” still demands a version bump on every internet-facing httpd.

Quick Answer
CVE-2021-44790 (announced 2021-12-20 with Apache httpd 2.4.51→2.4.52 releases) is a potential buffer overflow, exploitable for remote code execution, in mod_lua’s multipart request-body parsing: crafted multipart bodies sent to a server where mod_lua is loaded AND a Lua script handles request bodies via r:parsebody() could overflow a buffer while decoding. Practical exposure was limited by two conditions stacked in defenders’ favour — mod_lua is not enabled by default (and was never a common production module), and the vulnerable path required Lua code specifically processing multipart form bodies — so the observed-exploitation record stayed quiet (no mass campaigns documented). Fixes: upgrade to Apache httpd 2.4.52 (both 44790 and 44791 fixed); operators who could not upgrade immediately could simply ensure mod_lua was unloaded. Security meaning: (1) December 2021’s compounding fatigue was itself an operational risk — patch triage under multiple critical advisories requires pre-agreed severity rubrics, not fresh judgement at 2 a.m.; (2) “rare configuration” reduces but does not eliminate RCE scope, because module inventories are exactly what orgs couldn’t produce quickly during Log4Shell week; (3) httpd’s advisory cadence (this followed the summer’s CVE-2021-41773 path-traversal/RCE and its 45046 companion) kept web-server hygiene on the annual-review list.

What happened

The disclosure: on 20 December 2021 the Apache httpd project shipped 2.4.52 with an advisory covering two issues — CVE-2021-44790 (mod_lua multipart buffer overflow, potential RCE) and CVE-2021-44791 (a NULL-pointer read, i.e. denial of service, in mod_session’s merge functionality). Response dynamics were dominated by context: eleven days post-Log4Shell, with discovery workloads still saturated, security teams triaged the advisory’s headline (web-server RCE) against its conditions (mod_lua loaded + parsebody use). Most estates concluded exposure was negligible and scheduled routine upgrades; the honest minority without module inventories faced another fire-drill of the exact dependency-mapping weakness Log4Shell had already exposed.

The deeper story was the meta-lesson stacking. December 2021 delivered Log4Shell (10 Dec), the Kronos outage (11 Dec), follow-up Log4j CVEs (13 Dec onward), and this httpd advisory (20 Dec) in one continuous stretch — a compounding-crisis sequence that incident-response literature now uses to argue for severity-rubric pre-agreement, patch-team surge capacity, and the difference between “critical CVSS” and “critical to my estate”. CVE-2021-44790, with modest real-world reach, became the footnote that proved the point: the advisory’s risk to a specific org depended entirely on configuration knowledge they either did or didn’t already possess.

How it worked

The vulnerable path conditionally:

CVE-2021-44790 vulnerable-path conditions:
  1. Apache httpd server loads mod_lua
     (NOT default; requires explicit
      LoadModule lua_module)

  2. a Lua handler processes request bodies
     via r:parsebody() on multipart data
     (scripts calling parsebody on POSTed
      multipart/form-data streams)

  3. attacker sends crafted multipart body:
     oversized or segmented parts -> decoding
     buffer overflows (heap over-read/write
     per advisory wording)

  4. potential consequence: code execution
     in worker process context

  existence proof vs practical proof:
  module default-off + rare parsebody
  usage -> tiny exposed population
  (mass scanners found little to hit)

fix paths (2021-12-20):
  a. upgrade to httpd 2.4.52  (preferred)
  b. ensure mod_lua not loaded (mitigation
     where upgrade windows were Log4Shell-
     saturated)

The takeaway architecture: web-server risk lives in the loaded-module set, exactly as application risk lived in the dependency tree Log4Shell exposed. Module-aware inventory (httpd -M output captured at deploy time, config-managed LoadModule declarations, container-image httpd variants catalogued) turns “are we affected?” from an investigation into a lookup — the discipline our supply-chain hygiene guide generalises across the stack.

data-hmmnm-seam="2">

Impact and numbers

Metric Value Source
CVE / date CVE-2021-44790, announced 2021-12-20 Apache advisory
Component mod_lua multipart parsing (r:parsebody) Apache advisory
Type / impact Buffer overflow → potential RCE Apache advisory
Companion CVE CVE-2021-44791: mod_session NULL-read (DoS) Apache advisory
Fixed in Apache httpd 2.4.52 Apache release
Prerequisites mod_lua loaded + Lua script parsing multipart bodies Apache advisory
Observed exploitation No mass campaigns documented industry telemetry
Context 10 days post-Log4Shell; week of Kronos outage; Log4j follow-up CVEs timeline record
data-hmmnm-seam="3">

Timeline

Date Event
2021-12-20 Apache httpd 2.4.52 released; CVE-2021-44790/-44791 advisory published
2021-12-20→24 Global triage: module inventories checked; most estates schedule routine upgrades
2021-12→2022-01 Detection engineering: multipart-to-lua-handled-endpoint rules added where relevant
2022 onward Retrospectives fold the advisory into December-2021 compounding-crisis case studies
data-hmmnm-seam="4">

Why it still matters in 2026

As the encore that taught patch-triage discipline. The advisory arrived into the most saturated response window in modern security history and forced organisations to differentiate headline severity from contextual exposure — the precise judgement that mature programmes now encode as standing rubrics (affected-configuration checks before emergency-change authorisation). Its technical lesson (server-module inventory as a first-class asset, checked as routinely as package versions) landed durably: modern hardening baselines capture loaded-module sets in configuration-management, container images, and infrastructure-as-code, so the next rare-module RCE answers itself. And culturally, CVE-2021-44790 closed the year that made component-level vulnerability governance mainstream: after SolarWinds, Exchange, httpd’s own 41773 summer, Log4Shell, and this, the industry stopped treating infrastructure-adjacent libraries as invisible plumbing. December 2021 is the period every subsequent “vulnerability-blizzard” response plan is measured against, and 44790 is its case study in triage-under-exhaustion.

data-hmmnm-seam="5">

Detection and hardening takeaways

  • Maintain loaded-module inventories for every web server. Capture httpd -M (+ nginx –with equivalents, container variants) in config management; an advisory’s first triage question — “is the component even active?” — should resolve in seconds, not firefight afternoons.
  • Pre-agree severity rubrics before the blizzard. Decide in calm conditions how affected-configuration, exploitation evidence, asset criticality, and fatigue load interact; December 2021 showed ad-hoc triage under saturation produces both overreaction and dangerous skips.
  • Upgrade fast when the fix is cheap. The honest postmortem consensus: even for low-exposure RCEs, a same-week routine upgrade to 2.4.52 cost less than the analysis proving safety — batch web-server version bumps into standard maintenance cadence.
  • Alert on unusual-path multipart traffic where mod_lua runs. Environments that genuinely use Lua body parsing (rare niche: dynamic-content prototyping, legacy gateways) should gate those endpoints and monitor for crafted multipart anomalies, since that path remains a historical soft spot.
  • Compound-crisis capacity planning. Log4Shell + Kronos + follow-up CVEs + httpd within eleven days broke teams running at 100%; surge rosters, vendor-IR retainer activation, and deliberate deprioritisation authority are the structural fixes since adopted.

FAQ

Was CVE-2021-44790 actually exploitable in the wild?

The vulnerable path was real (crafted multipart bodies to Lua parsebody handlers), but the exposed population was tiny: mod_lua off by default, rarely enabled in production, and the specific body-parsing usage rarer still. No mass-exploitation campaigns were documented. The advisory’s significance is operational — how triage performed under December-2021 saturation — more than its casualty count.

How is this different from the summer’s CVE-2021-41773?

Reach. The October path-traversal issue (41773, with its 45046 follow-up) hit default-reachable request-handling paths on widely deployed configurations and saw active exploitation; 44790 required an off-by-default module plus an uncommon code path. Same server, same year, opposite ends of the exposure spectrum — a useful reminder that severity context lives in deployment reality, not CVE headlines.

What should an org that missed this advisory do now?

Confirm nothing runs pre-2.4.52 httpd internet-facing; if any does, upgrade or at minimum verify mod_lua is unloaded. Then fix the class: module inventories, scheduled version floors, and advisory feed coverage, so the next low-frequency/high-impact server CVE never depends on someone remembering this one.

data-hmmnm-seam="end">

Prabhu Kalyan Samal

Application Security Consultant at TCS. Certifications: CompTIA SecurityX, Burp Suite Certified Practitioner, Azure Security Engineer, Azure AI Engineer, Certified Red Team Operator, eWPTX v3, LPT, CompTIA PenTest+, Professional Cloud Security Engineer, SC-900, SC-200, PSPO I, CEH, Oracle Java SE 8, ISP, Six Sigma Green Belt, DELF, AutoCAD. Writing about ethical hacking, security tutorials, and tech education at Hmmnm.