Résumé
Shellshock, disclosed on 24 September 2014 (twelve days after Bash maintainer Chet Ramey was privately warned by its discoverer, Stephane Chazelas), was a 25-year-old flaw in Bash, the command-line shell at the heart of nearly every Linux, Unix, and macOS system. Bash had a quirk: it could pass functions to child processes through environment variables, and it would keep executing any commands that trailed the function definition. Since web servers, mail servers, and network devices routinely put attacker-controllable data into environment variables before calling Bash, an attacker could smuggle commands into something as ordinary as an HTTP header and have the server run them, with no authentication. It was trivially exploitable, and Bash was everywhere, so within hours of disclosure botnets were mass-scanning the internet. Coming six months after Heartbleed, it cemented 2014 as the year the internet learned how much of its foundation was decades-old code nobody had re-examined.
How it worked
Bash has a feature for passing a function to a child process through an environment variable. The flaw was that when Bash imported such a variable, it did not stop at the end of the function definition; it kept parsing and executing anything that came after it. So a variable set to () { :; }; <command> would, the moment Bash started up and imported it, run <command>. The canonical proof of concept was a single line, env x='() { :;}; echo vulnerable' bash -c "echo test", which prints vulnerable on an affected shell.
The danger was in how much software hands attacker input to Bash through environment variables without thinking about it. The classic case was Apache CGI: a web server copies incoming HTTP headers (like the User-Agent) into environment variables and then invokes a Bash script. So an attacker sending a header like User-Agent: () { :;}; <command> got the server to run their command, unauthenticated remote code execution from a single header. The same pattern existed in DHCP clients (a malicious DHCP server could run code on a connecting client through dhclient), mail filters, and OpenSSH's forced-command feature, where it could break out of a key restricted to a single command. No login, no interaction.
The damage
Bash is on virtually every Unix-like system on earth, plus countless embedded devices, routers, and appliances, many of which are never updated. Within hours of disclosure, botnets were mass-scanning and exploiting unpatched systems for DDoS and backdoors (within a week CloudFlare was tracking around 1.5 million attacks and probes a day). The first patch turned out to be incomplete, and a string of distinct follow-on CVEs followed as researchers found new parser flaws (CVE-2014-7169, then the memory-corruption bugs CVE-2014-7186 and 7187, and further function-parser issues), six in all. Rated the maximum CVSS 10.0 under the v2 scale used at the time (9.8 under the later v3) and trivially exploitable, it was one of the most severe vulnerabilities of its era, and because so much embedded gear shipped Bash and never received updates, vulnerable devices lingered for years.
Why Shellshock still matters
Shellshock is the legacy-code lesson in its purest form: a bug that sat unnoticed in foundational software for a quarter of a century, and became one of the most dangerous flaws on the internet the moment someone looked at it through a modern threat model. Bash predates the web; nobody had re-audited its environment-variable handling against the idea of internet-facing CGI scripts feeding it hostile input. The takeaways still apply: do not pass untrusted input into a shell or its environment; use APIs that run programs with explicit arguments instead of shelling out; reduce internet-facing attack surface; and patch or retire embedded devices that bundle old, foundational software. It is a sibling of Heartbleed: both proved that much of the internet runs on decades-old code maintained, and re-examined, by very few.
Comment le corriger
- Patch Bash to a fixed version, and apply the follow-on fixes since the first patch was incomplete, on every system, including embedded devices and appliances that bundle it.
- Audit for internet-facing services that pass untrusted input into environment variables before invoking Bash (CGI, DHCP, mail filters), and disable or rewrite the risky ones.
- Hunt logs for exploitation strings (function-definition prefixes like `() {` in headers) and treat hits as a potential compromise.
Comment l’éviter
- Do not pass attacker-controlled input into a shell or its environment; use APIs that invoke programs directly with explicit arguments instead of shelling out.
- Reduce internet-facing attack surface: retire CGI and other patterns that hand untrusted input to a shell.
- Keep an inventory of where foundational software like Bash runs, especially in embedded and unpatched devices, and retire what can no longer be updated.
- Re-audit old, trusted software against a modern internet threat model; this bug was 25 years old and only dangerous once exposed to hostile input.
Références
- https://nvd.nist.gov/vuln/detail/CVE-2014-6271
- https://access.redhat.com/security/vulnerabilities/shellshock
- https://www.cisa.gov/news-events/alerts/2014/09/25/gnu-bourne-again-shell-bash-shellshock-vulnerability-cve-2014-6271-cve-2014-7169-cve-2014-7186-cve
- https://en.wikipedia.org/wiki/Shellshock_(software_bug)
Vulnérabilités liées
Tout Infra →- CRITICALCVE-2021-38647
On 14 September 2021 Wiz disclosed OMIGOD, a set of four flaws in Open Management Infrastructure (OMI), an agent that Azure silently auto-deploys onto many Linux VMs via services such as Log Analytics, Azure Automation, Azure Diagnostics and Defender for Cloud. The flagship bug, CVE-2021-38647 (CVSS 9.8), gave unauthenticated remote code execution as root, while CVE-2021-38645, CVE-2021-38648 and CVE-2021-38649 were local privilege escalations. The agent ran as root and could expose a management port (5985, 5986 or 1270); because the authorization code left the AuthInfo struct at its zero-initialized default of uid 0 and gid 0, a request that omitted the Authorization header was treated as an authenticated root request, so a single crafted packet yielded root code execution. This was a provider-side flaw under shared responsibility that most customers did not know was installed and could not patch themselves. Unlike the other entries here it was exploited in the wild within days, with attackers scanning for exposed agents and dropping Mirai botnet and cryptominer payloads.
- HIGHINFRA-USBLITER8-2026
usbliter8, published on 18 June 2026 by a research group called Paradigm Shift, is an unpatchable BootROM exploit for Apple's A12 and A13 chips, the silicon inside the iPhone XS, XR and 11 families plus the Apple Watch Series 4 and 5. It is the long-awaited successor to checkm8, the 2019 exploit that broke every Apple chip from the A5 to the A11 and was assumed to be the end of that road. The bug lives in the SecureROM, the very first code an Apple device runs at power on, which is etched into the silicon at the factory and can never be altered by any software update. usbliter8 abuses a hardware flaw in the Synopsys DWC2 USB controller: a mismatch in how the controller tracks its DMA memory while buffering USB Setup packets lets an attacker walk a write pointer backwards through memory and overwrite arbitrary SRAM, ending in full code execution inside the most trusted code on the chip. From there it can boot unsigned firmware and step outside Apple's chain of trust entirely, stamping the string PWND into the device's USB serial number as proof of control. The catch is that it is not a remote attack: it needs physical possession of the device, DFU recovery mode, a USB connection and a small RP2350 microcontroller board, and nothing it changes survives a reboot. It also does not break the Secure Enclave, so a device protected by a strong passcode keeps its user data encrypted even after the boot chain has been taken over. Apple cannot repair the affected chips; the only real remedy is newer hardware, because the A14 and later configure the controller correctly and are out of reach.
- HIGHCVE-2026-31431
Copy Fail (CVE-2026-31431), disclosed on 29 April 2026 by the security firm Theori, is a Linux kernel flaw that turns any unprivileged local user into root with a 732-byte Python script and no luck required. Despite a name that sounds like a clipboard bug, it has nothing to do with copy and paste: it is a failed copy deep in the kernel's crypto code. A nine-year-old optimization in the AF_ALG crypto socket interface let an attacker steer the kernel into writing four attacker-chosen bytes into the page cache, the in-memory copy of files that the CPU actually executes. Patch the cached pages of a setuid-root binary like /usr/bin/su, run it, and you are root. The exploit is a straight-line logic flaw with no race condition and no hardcoded kernel addresses, so the exact same script runs at roughly 100 percent reliability across Ubuntu, RHEL, SUSE, Amazon Linux and every other distribution built since 2017. Worse, because the page cache is shared by the whole machine, it crosses container boundaries: one poisoned page in a Kubernetes pod can compromise neighbouring tenants and the host. The disk file is never touched, so file-integrity scanners stay silent. It rates CVSS 7.8 (High), was added to CISA's Known Exploited Vulnerabilities catalog on 1 May 2026, and is notable for how it was found: an AI-assisted code scan surfaced a bug that had been silently exploitable for nearly a decade in about one hour.
- CRITICALCVE-2025-1974
IngressNightmare was a chain of five vulnerabilities in the Ingress-NGINX Controller for Kubernetes disclosed on 24 March 2025 by the Wiz Research team, the most severe being CVE-2025-1974 (CVSS 9.8), which enabled unauthenticated remote code execution from the pod network. Wiz estimated about 43% of cloud environments were vulnerable and identified over 6,500 publicly exposed clusters, including Fortune 500 organizations. The controller's validating admission webhook ran as an unauthenticated HTTP endpoint reachable by any workload on the pod network, accepting attacker-supplied AdmissionReview requests containing crafted Ingress objects. The supporting CVEs (CVE-2025-24514 auth-url, CVE-2025-1097 auth-tls-match-cn, CVE-2025-1098 mirror UID, CVE-2025-24513 path bypass) injected unsanitized NGINX configuration directives via annotations into a temporary config the controller validated with nginx -t. The attacker uploaded a shared-library payload by abusing NGINX client-body buffering (an oversized Content-Length keeps the request file descriptor open in ProcFS) and then used the injected ssl_engine directive to load that library during validation, achieving code execution in the controller pod whose service account could read all cluster secrets across namespaces, enabling full cluster takeover.
- HIGHCLOUD-ENVFILE-EXTORTION-2024
On August 15, 2024, Palo Alto Networks Unit 42 detailed a large-scale extortion campaign that compromised cloud environments by harvesting exposed environment variable files. Attackers scanned at least 110,000 domains and collected over 90,000 unique variables, including roughly 7,000 cloud service credentials and 1,515 social media credentials, with their infrastructure probing around 230 million targets. The vector was a web server misconfiguration: .env files inside the web root were served as plaintext over HTTP because the servers had no rule denying access to dotfiles, exposing the long-lived AWS IAM access keys hardcoded inside. The initial IAM principals lacked full admin but retained permission to create roles and users, so attackers called CreateRole and attached AdministratorAccess to escalate, then spun up Lambda functions across regions to automate further internet-wide scanning. They used the victims' own AWS accounts to exfiltrate and delete S3 objects, then uploaded ransom notes demanding payment. The failure chain combined exposed dotfiles, long-lived hardcoded credentials, and over-permissioned IAM, not any cloud-provider flaw.
- CRITICALCLOUD-BUCKET-MONOPOLY-2024
In research disclosed to AWS on February 16, 2024 and presented at Black Hat USA and DEF CON 32 in August 2024, Aqua Security's Nautilus team described a class of S3 bucket-name takeover attacks they called Bucket Monopoly, affecting CloudFormation, Glue, EMR, SageMaker, Service Catalog, and CodeStar. These services auto-created S3 buckets with predictable names built from static prefixes plus the account ID and region, such as cf-templates-{hash}-{region}, aws-glue-assets-{account-id}-{region}, and sagemaker-{region}-{account-id}, where account IDs are discoverable from ARNs, access keys, and public repos. Because S3 bucket names are globally unique, an attacker could pre-create a victim's predictably named bucket in a region the victim had not yet used (a Shadow Resource), then the victim's service would later read attacker-controlled content from it. This enabled data tampering, information disclosure, remote code execution by injecting malicious Glue or CloudFormation content, and in some cases full account takeover via planted admin roles; AWS remediated by adding randomized suffixes to bucket names and enforcing aws:ResourceAccount conditions. The class also covers reuse of abandoned or dangling bucket names that a victim configuration still references.