
إثبات المفهوم (أداة بناء) لـ CVE-2026-39973 (apktool)
هذه أداة صغيرة بلغة C# لبناء ملفات apk لـ CVE-2026-39973.
CVE-2026-39973 هي ثغرة اجتياز مسار داخل مستودع github iBotPeaches/Apktool وتؤثر على الإصدار 3.0.1.
تسمح للمهاجمين بإنشاء موارد خاصة بهم وحقن تسلسل ..\ داخل نوع الإدخال، مما يسمح للمهاجم بكتابة أي ملف إلى ~/.bashrc أو مسار بدء تشغيل Windows.
تنبع هذه الثغرة من انحدار أمني في الالتزام e10a045 (PR #4041) والذي يزيل BrutIO.detectPossibleDirectoryTraversal() من ResFileDecoder.java
ResFileDecoder.java#L103-L109 قبل:
String outResPath = entry.getTypeName() + entry.getConfig().getQualifiers() + "/" + entry.getName();
if (BrutIO.detectPossibleDirectoryTraversal(outResPath)) {
LOGGER.warning("Potentially malicious file path: " + outResPath + ", using instead: " + inResPath);
outResPath = inResPath;
} else if (!ext.isEmpty()) {
outResPath += "." + ext;
}
ResFileDecoder.java#L103-L104 بعد:
String outResPath = entry.getTypeName() + entry.getConfig().getQualifiers() + "/" + entry.getName()
+ (ext.isEmpty() ? "" : "." + ext);
أزال هذا الالتزام فحصًا اعتُبر "غير مفيد" على مسار الإخراج بالكامل حيث تم التحقق من entry.name مسبقًا (مُنشئ ResEntrySpec).
نسي المؤلف أن اسم نوع الإدخال قد يكون عرضة لاجتياز المسار عن طريق صياغة ملف resources.arsc خبيث خاص بنا.
resources.arsc هو ملف يحتوي على بيانات الموارد والمسارات وأسماء الأنواع والمزيد.
يخزن كل ما نحتاجه لتعديل اسم النوع أو صياغة ملف resource.arsc لاستغلال Apktool.
على الرغم من تكراره، وجدت فقط توثيقًا ضعيفًا لكنه مُرضٍ حول التسلسل.
عند هذه النقطة، يُنصح بشدة بقراءة توثيق apktool.
بدأت بالاعتماد على Apktool مباشرة لأنني سأحتاج إلى بناء ملف resources.arsc لهذا التطبيق حصريًا.
قمت بتنزيل ملف APK عشوائي من الإنترنت وفتحته باستخدام 7zip. ثم استخرجت ملف resources.arsc وبدأت في دراسة هياكل البيانات جنبًا إلى جنب مع كود محلل Apktool.
ثم صنعت أداة بناء صغيرة بلغة C# لملف resources.arsc، وكتبت ResTable وResPackage مع ResType واحد يحتوي على تسلسل ..\ ومسار مجلد بدء تشغيل Windows، كما يحتوي على إدخال واحد وهو ملف الحمولة.