Neler yeni
Bughane Academy

Bughane Academy, bug bounty, web güvenliği ve sızma testi alanında kendini geliştirmek isteyenler için kurulmuş Türkçe odaklı bir topluluktur.

Burada; gerçek güvenlik açıkları, recon ve exploit teknikleri, payload & bypass yöntemleri, araçlar, scriptler ve write-up’lar topluluk tarafından paylaşılır ve tartışılır.

Birlikte öğren, birlikte üret, birlikte güçlen.

Android’de “her uygulama olabilme” zafiyeti

Katılım
27 Ocak 2026
Mesajlar
71
Tepkime puanı
38
Puan
18
Bu açık, WRITE_SECURE_SETTINGS iznine sahip bir aktörün (ADB shell veya bazı ayrıcalıklı/ön-yüklü uygulamalar gibi) cihazda istediği herhangi bir uygulama kimliğiyle kod çalıştırabilmesine yol açıyor. CVE kaydı da bunu “herhangi bir uygulama olarak kod çalıştırma” şeklinde tarif ediyor. (CVE-2024-31317)

1) Neden bu kadar kritik?​


Android’de güvenlik modeli “Linux user” mantığından çok app identity (uygulama kimliği) mantığına dayanıyor:
Her uygulamanın ayrı UID’si var; dolayısıyla:
  • Uygulama A, Uygulama B’nin /data/data/ alanını normalde okuyamaz.
  • Token/oturum bilgileri, keychain/keystore anahtarları, hesap erişimleri genelde uygulama kimliğine bağlıdır.
  • MDM/Device Owner gibi cihaz yönetimi ayrıcalıkları da belirli uygulamalarla sınırlıdır.
Bu açık, bu izolasyonu “kimlik taklidi” üzerinden deldiği için etkisi devasa.

2) Etkilenme koşulu ne?​

Saldırganın “tamamen sıradan bir uygulama” olması yetmiyor. Genellikle şu koşullardan biri gerekiyor:
  • ADB shell erişimi (fiziksel erişim, debug açık cihazlar, bazı kurum senaryoları), veya
  • Cihazda WRITE_SECURE_SETTINGS iznine sahip bir privileged/ön yüklü uygulamanın ele geçirilmesi.
Yani: “internetten rastgele indirilen her app yapar” değil; ama kurumsal cihazlar, debug açık cihazlar, üretici uygulamaları gibi senaryolarda risk ciddi.

3) Teknik olarak “ne oluyor”?​


Android’de uygulama süreçlerini başlatan tarafın merkezinde Zygote denen bileşen var. Sistem bir app’i başlatacağı zaman Zygote’a “şu UID ile, şu paket adıyla, şu app-data-dir ile süreç oluştur” gibi parametreler gönderiyor.
Problem şu: Zygote ile konuşan tarafın kullandığı metin tabanlı argüman formatında, belirli bir global ayarın değeri (hidden_api_blacklist_exemptions) beklenmedik karakterler (özellikle satır sonları) içerdiğinde, bu değer komutun içine “olduğu gibi” karışabiliyor ve istemeden komut enjeksiyonu etkisi doğurabiliyor. Bu da kimlik parametrelerini saptırıp “başka bir uygulama gibi süreç başlatma” sınıfına kapı aralayabiliyor.

4) Saldırgan bunu elde edince pratikte ne yapabilir?​

  • Herhangi bir uygulamanın verisini okuma/yazma: Örn. mesajlaşma uygulamasının lokal DB’si, dosyaları, cache’i.
  • Oturum/token kullanımı: Uygulamaların “benim hesabım açık” diye tuttuğu tokenlar genelde app kimliğiyle erişilebilir. Bu, hesap ele geçirme zincirlerine yol açabilir.
  • Kurumsal cihaz yönetimini zayıflatma: Cihaz sahibi (Device Owner) uygulamasını taklit edebilmek, bazı politikalara müdahale riskini doğurur.
  • Sistem ayarlarını oynama: Zaten WRITE_SECURE_SETTINGS senaryosu, cihazın hassas global ayarlarına erişim demek.




Aşağıdaki komutlar sadece durum tespiti içindir.


A) Cihazın patch level’ını kontrol et

Bash:
adb shell getprop ro.build.version.security_patch
  • Çıktı 2024-06-01 / 2024-06-05 veya daha yeni ise (cihaz/üreticiye göre değişebilir), pratikte bu CVE için yamalı olma ihtimali yüksek.
  • Çıktı Haziran 2024 öncesi ise cihaz “potansiyel risk” sınıfında.

B) Android sürüm + build bilgisi​

Bash:
adb shell getprop ro.build.version.release
adb shell getprop ro.build.fingerprint

C) Global ayarın mevcut değerini okumak

Bash:
adb shell settings get global hidden_api_blacklist_exemptions
Not: Burada kimseye “şöyle yazarsan patlar” gibi bir şey anlatmıyorum. Sadece mevcut değeri görmek.

D) Bu cihazda WRITE_SECURE_SETTINGS kimlerde var?​

Bu komut, cihazda hangi paketlerin bu izni tutabildiğini görmek için:
Bash:
adb shell dumpsys package | grep -n "WRITE_SECURE_SETTINGS" -n
Daha hedefli bakmak istersen:
Bash:
adb shell pm list packages -f | head

F) (Opsiyonel) Python snippet​

Python:
import subprocess
from datetime import date

def adb(cmd):
    return subprocess.check_output(["adb", "shell"] + cmd, text=True).strip()

patch = adb(["getprop", "ro.build.version.security_patch"])
print("Security patch level:", patch)

try:
    y, m, d = map(int, patch.split("-"))
    is_vuln_window = (y, m) < (2024, 6)
    print("Potentially vulnerable window:", is_vuln_window)
except Exception as e:
    print("Could not parse patch level:", e)

Okuduğunuz için teşekkürler. Sorularınızı yorumlarda bırakın; exploit detayı paylaşmadan, tespit/mitigation tarafında yardımcı olmaya çalışırım. Yanlışım/eksiğim varsa düzeltmeye açığım.
 
Geri
Üst