RFI — web application user boshqaradigan remote manzil yoki pathdagi faylni include qilishga ruxsat berganda yuzaga keladigan zaiflik. To‘liq nomi Remote File Inclusion. Zaiflik serverga tashqi manbadagi zararli code yoki contentni yuklatib, interpreter orqali bajarishga olib kelishi mumkin.
RFI ko‘proq remote URL’ni include sifatida qabul qiladigan platforma va noto‘g‘ri konfiguratsiyalarda uchraydi.
Local va remote include
LFI serverning lokal filesystemidagi faylni include qiladi.
RFI esa tashqi serverdagi resource’ni olib keladi:
https://attacker.example/payload
Agar application bu contentni server-side script sifatida execute qilsa remote code execution yuz berishi mumkin.
Zaif funksiya
Application theme, language yoki page qiymatini requestdan olib include qilishi mumkin.
Masalan:
include(user_supplied_location)
Developer local nom kutadi, ammo remote URL scheme qabul qilinadi.
Bu designning o‘zi xavfli.
Remote URL sozlamasi
Ayrim runtime yoki frameworklar URL orqali file include qilishni configuration bilan boshqaradi.
Kerak bo‘lmasa bu imkoniyat o‘chiriladi.
Faqat global flagga tayanish yetarli emas; application user inputini include pathga uzatmasligi kerak.
Code execution
Remote server zararli script qaytaradi.
Nishon runtime uni include qilib parse qilsa code application processi huquqlari bilan bajariladi.
Attacker keyin:
amaliga o‘tishi mumkin.
Content-Type himoya emas
Remote response text/plain yoki boshqa Content-Type bilan qaytsa ham include engine uni extension yoki body asosida execute qilishi mumkin.
HTTP header xavfsiz contentni kafolatlamaydi.
Application remote code’ni umuman include qilmasligi kerak.
URL allowlist
Agar business haqiqatan remote resource olishni talab qilsa to‘liq arbitrary URL emas, oldindan tasdiqlangan source ishlatiladi.
Tekshiriladi:
- scheme;
- hostname;
- port;
- resolved IP;
- redirect;
- certificate;
- path;
- content signature.
Biroq remote template execute qilish o‘rniga data format sifatida parse qilish xavfsizroq.
DNS va redirect
Allowlistdagi domen attacker nazoratidagi IPga o‘zgarishi yoki ruxsat etilgan URL boshqa hostga redirect qilishi mumkin.
Har connection va redirect target qayta tekshiriladi.
Remote content cryptographic signature bilan tasdiqlanishi mumkin.
SSRF bilan aloqa
Remote include serverni attacker tanlagan URLga request yuborishga majbur qiladi. Shu jihatdan u SSRFga o‘xshaydi.
Farqi — RFI’da response ko‘pincha include yoki execute qilinadi.
SSRF’da esa ichki resource’ga requestning o‘zi asosiy muammo bo‘lishi mumkin.
Supply-chain xavfi
Application qonuniy remote script yoki template’ni runtime’da yuklasa source server buzilganda barcha consumerlar zarar ko‘rishi mumkin.
- build vaqtida olinadi;
- checksum yoki signature bilan tekshiriladi;
- immutable package’ga qo‘shiladi;
- version pin qilinadi.
Runtime remote include’dan qochiladi.
Egress filtering
Application server faqat zarur tashqi manzillarga chiqishi mumkin.
Noma’lum internet hostlariga outbound connection bloklanadi.
Bu RFI va SSRF ta’sirini kamaytiradi.
Ammo approved source buzilsa content validation baribir kerak.
Minimal privilege
Application processi administrator yoki root bo‘lmasligi kerak.
Remote code bajarilgan taqdirda:
ga access cheklanadi.
File integrity
RFI orqali persistence yoki local file o‘zgarishi yuz bersa file integrity monitoring aniqlashi mumkin.
Yangi web shell, startup entry yoki scheduled task indikator bo‘lishi mumkin.
Read-only filesystem hujumchining doimiy fayl yozishini cheklaydi.
Himoya
Asosiy yondashuvlar:
- user input bilan include qilmaslik;
- remote include imkoniyatini o‘chirish;
- local logical key allowlisti;
- runtime remote code yuklamaslik;
- outbound networkni cheklash;
- signed artifact;
- minimal process permission;
- upload va template storage’ni ajratish.
Test
Testlar URL scheme, encoded URL, redirect, DNS o‘zgarishi, protocol-relative manzil, remote response va content parsing holatlarini qamrab oladi.
Test serveri faqat nazoratdagi xavfsiz callback endpointdan foydalanadi.
Incident
RFI ishlatilgan bo‘lsa hostda RCE yuz bergan deb qaralishi mumkin. Server izolyatsiya qilinadi, loglar saqlanadi, secretlar almashtiriladi va ishonchli image’dan tiklash ko‘rib chiqiladi. Faqat remote domenni bloklash persistence’ni yo‘q qilmaydi.
Cache poisoning
Remote content cache qilinsa attacker bir marta zararli response yetkazib, u cache’da uzoq saqlanishiga erishishi mumkin. Cache key source va versionni to‘liq qamrab oladi. Content signature xato bo‘lsa response cache’ga yozilmaydi.
Dependency mirror
Tashqi artifactlar to‘g‘ridan-to‘g‘ri runtime’da olinmasdan tashkilot nazoratidagi mirror yoki registry orqali tarqatiladi. Mirror malware scanning, signature va version retentionni boshqaradi. Application internetdan arbitrary code yuklamaydi.
Monitoring
Serverdan noma’lum domainlarga yangi outbound connection, web processdan interpreter ishga tushishi va web rootdagi fayl o‘zgarishi RFI exploitation indikatori bo‘lishi mumkin. DNS va process telemetry birga tahlil qilinadi.
Remote template data
Partnerdan olinadigan UI yoki configuration haqiqatan zarur bo‘lsa u executable code emas, qat’iy schema’li data sifatida qabul qilinadi. Parser noma’lum field va expressionlarni rad etadi. Render qilish uchun local trusted template ishlatiladi.
Availability
Remote include tashqi server unavailable bo‘lsa asosiy applicationni ham ishdan chiqaradi. Artifactlar build vaqtida pin qilinishi yoki local cache’da ishonchli nusxa bilan saqlanishi availability va integrityni yaxshilaydi.
Bog‘liq tushunchalar
Remote File Inclusion, Local File Inclusion, Remote Code Execution, SSRF, Include function, Egress filtering, Supply-chain security, File integrity, Least privilege