Merhabalar Değerli ImhaTeam.org Üyeleri,
Remote Code Execution (RCE) — bir saldırganın hedef sistemde (sunucu, servis, uygulama) kendi seçtiği kodu çalıştırmasına izin veren kritik bir zafiyettir. Bu zaafiyet, saldırganın veri çalması, yetkisiz erişim kazanması, arka kapı bırakması veya hizmetleri bozması (DoS, veri silme vb.) için kullanılabilir. RCE, çoğu programlama dilinde bulunan ve kodu çalıştıran/ değerlendiren fonksiyonların yanlış/eksik doğrulama ile birleştirilmesinden doğar.
Remote Code Execution (RCE) — bir saldırganın hedef sistemde (sunucu, servis, uygulama) kendi seçtiği kodu çalıştırmasına izin veren kritik bir zafiyettir. Bu zaafiyet, saldırganın veri çalması, yetkisiz erişim kazanması, arka kapı bırakması veya hizmetleri bozması (DoS, veri silme vb.) için kullanılabilir. RCE, çoğu programlama dilinde bulunan ve kodu çalıştıran/ değerlendiren fonksiyonların yanlış/eksik doğrulama ile birleştirilmesinden doğar.
RCE nasıl ortaya çıkar? (Özet)
- Uygulama, kullanıcı tarafından sağlanan girdiyi doğrudan kod değerlendirme fonksiyonlarına (ör. eval, dinamik include/require, exec/system) gönderiyorsa.
- Dosya yükleme mekanizmalarında dosya içeriği veya uzantısı doğru şekilde doğrulanmıyorsa (ör. .php yüklenip webroot içinde çalıştırılabiliyorsa).
- Şablon motoru/serileştirme/metin işleme aşamalarında kullanıcı girdisi kaçırılmadan çalıştırılabiliyorsa.
- Dış bağımlılıklar (plugin, paket) kötü amaçlı kod içeriyorsa veya tedarik zinciri saldırısına açıksa.
-
Güvenli / Güvensiz kullanıma örnek (konsept, güvenlik odaklı)
Not: Burada kötü amaçlı istismar stringleri vermiyorum. Amaç, riskli kullanımı göstermek ve güvenli alternatifi sunmaktır.
Güvensiz (Python):
# TEHLİKELİ: kullanıcı girdisini doğrudan eval ile çalıştırmak
Kod:
user_input = request.args.get("expr")
result = eval(user_input) # RCE riski
Güvenli alternatifler:
- Eğer beklenen veri yapı ise json.loads() kullan.
- Python'da literal veri yapıları gerekiyorsa ast.literal_eval() kullan (sadece literal).
- Komut çalıştırman gerekiyorsa subprocess.run([...], shell=False) ve argümanları kaçırma yerine liste olarak ver.
Kod:
import json
import ast
# Beklenen JSON geliyorsa:
try:
data = json.loads(user_input)
except ValueError:
# hatalı giriş -> reddet
pass
# Literal değerlendirme gerekiyorsa:
try:
literal = ast.literal_eval(user_input)
except (ValueError, SyntaxError):
# reddet
pass
PHP — dikkat edilmesi gerekenler:
- eval(), preg_replace (e modifier), dinamik include/require (kullanıcı kontrollü path) tehlikelidir.
- disable_functions ile gerekli olmayan tehlikeli fonksiyonları kapatmak yardımcı olur (ör: exec, passthru, shell_exec, system, proc_open, popen).
-
- RCE, uygulama mantığındaki veya konfigürasyondaki bir hatadan doğan çok kritik bir zaafiyettir. Temel savunma: kod içinde kullanıcı girdisini asla yorumlama, güvenli parser/librariy kullan, dosya yüklemelerini dikkatle doğrula, least-privilege ile çalış ve runtime/ürün ortamını sandbox’la. Ayrıca tespit ve izleme (logs, EDR, SIEM) ile olası saldırıların erken fark edilmesi hayati.
- Konuyu herkese açık yapıyorum çünkü GPT'ye yazdırdım öyle üstün körü çok emek vermedim iyi forumlar
Bu içeriği görmek için giriş yapın.
