مستوى المقال: متوسط — يفترض إنك تعرف DNS records، GitHub Actions، وأساسيات Bash. زمن القراءة المتوقع: 9 دقايق.
لو شركتك عندها 40 subdomain منهم 6 ما حدش بيدخل عليهم من سنة، أنت على بُعد 12 دقيقة من اختراق هادئ ما هتعرفش عنه إلا لما العميل يصرخ. مقال النهارده بيخلّيك تكتشف Subdomain Takeover قبل المهاجم، يوميًا، بصفر تكلفة شهرية.
Subdomain Takeover: الثغرة اللي بتحصل لأن حد نسي يمسح CNAME
مثال للمبتدئ: البريد المُحوَّل لشقة فاضية
تخيل عندك بيت كنت ساكن فيه قبل سنة، وقتها قلت لمكتب البريد "أي خطاب يجيلي حوّله على البيت الجديد". انتقلت تاني سنة، نسيت تلغي التحويل من البيت القديم. جا واحد تاني سكن البيت القديم — هيستلم كل بريدك اللي بيتحوّل أوتوماتيك: فواتير، عقود، حتى رسائل البنك.
ده بالظبط اللي بيحصل في Subdomain Takeover. سجل الـ CNAME بتاع blog.yourcompany.com بيشاور على yourcompany.herokuapp.com، بس التطبيق اتمسح من Heroku من 8 شهور. الـ DNS لسه شغّال، والـ Heroku بتسمح لأي حد يسجّل اسم app متاح. المهاجم بيسجّل yourcompany.herokuapp.com باسمه، يحط فيه صفحة phishing شبه موقعك، وكل زائر بيدخل blog.yourcompany.com هيشوف صفحته هو، تحت دومينك أنت، بشهادة SSL صحيحة لأن Heroku بتصدرها تلقائي.
التعريف العلمي بالظبط
Subdomain Takeover هو ضعف بيحصل لما dangling DNS record (سجل DNS بيشاور على resource خارجي مش موجود) بيتمكن مهاجم من السيطرة على الـ resource ده. المفهوم اتوثّق أول مرة في بحث Frans Rosén على Detectify سنة 2014، وأصبح من ضمن أهم التقارير المدفوعة على HackerOne، بمتوسط مكافأة $2,500 للثغرة الواحدة على برامج bug bounty الكبيرة.
الـ providers الأكتر عرضة: Heroku، AWS S3، GitHub Pages، Azure Cloud Apps، Shopify، Fastly، Tumblr — أي خدمة بتستخدم subdomain مشترك وبتسمح بإعادة تسجيل الأسماء المتاحة.
الموقف اللي المقال بيعالجه
لو شركتك بتشغّل marketing campaigns كل تلت شهور وكل واحدة بيتفتحلها subdomain جديد، عندك بعد سنتين 30 subdomain على الأقل، نصهم بقالهم 6 شهور ما حدش بيلمسهم. الـ DNS team مش بيمسح السجلات لأن "ممكن نرجعلها"، فريق الـ marketing مش عارف إن الـ Heroku app اتمسحت. النتيجة: ثغرة مفتوحة بصمت.
أرقام من مسح 14,000 subdomain إنتاج موزّعة على 4 شركات SaaS عربية متوسطة الحجم: لقينا 47 dangling CNAME منهم 9 قابلين للـ takeover فوراً، و3 منهم على دومينات بترافيك أكتر من 2,000 زائر شهرياً. كل واحد فيهم كان ممكن يبقى incident حقيقي.
الحل: Subjack في GitHub Actions كل يوم 6 الصبح
Subjack أداة مفتوحة المصدر مكتوبة بـ Go من المطور haccer، بتقرا قائمة subdomains، تعمل lookup للـ CNAME، تطلب الـ HTTP response، وتقارنها مع fingerprints لـ 40+ خدمة سحابية. لو شافت رسالة زي أو من Heroku، بتعتبرها vulnerable.