✦ Preferințe salvate
// scanner de securitate  ·  fals pozitiv  ·  pierdere de date  ·  dovezi primare
0 BYTES
Un file manager PHP funcțional, întreținut activ, a fost marcat malițios pe două conturi diferite, exact în același minut, apoi șters fără backup și fără nicio șansă de a reacționa.
manager.php · monarx / hostinger malware scanner · 07.08.2026, 18:25 CEST
0 B
Dimensiune fișier după cleanup
2
Conturi marcate, același minut
$0
Compensație oferită
24h
Fereastra de risc a backup-ului zilnic
// incidentul

Un instrument legitim, șters pe două servere deodată

manager.php este un file manager PHP construit intern, protejat prin parolă, autentificat prin sesiune. Nu e public. Nu e un script luat de pe un forum. A fost construit și întreținut ca panou de administrare intern pentru un produs comercial, folosit zilnic timp de luni de zile, fără niciun avertisment de securitate până în acel moment.

Pe 7 august 2026, la ora 18:25 CEST, scannerul de malware al Hostinger (Monarx) a marcat manager.php drept Malicious pe două conturi de hosting fără legătură între ele, exact în același moment: acest site, tyrus.dk, unde fișierul era activ dezvoltat, și un cont client, fără legătură, unde același fișier stătea neschimbat de peste șase săptămâni. Ambele copii au fost trunchiate automat la 0 bytes. Fără avertisment, fără carantină, fără backup dedicat înainte de acțiune.

hpanel · malware scanner · automated cleanup log
2026-08-07 18:25:03 CEST
account_1: tyrus.dk → manager.php → status: MALICIOUS
account_2: [client account, unrelated] → manager.php → status: MALICIOUS
action taken: REMOVED (truncated to 0 bytes, no isolated backup)
file age: tyrus.dk actively edited · account_2 unchanged 6+ weeks
human review before action: none · quarantine state: none

Rezultatul a fost un panou de administrare gol, un produs stricat, și un client care a aflat întâmplător a doua zi dimineață, nu pentru că a fost notificat cineva.

// cronologie

De la "pagina e goală" la recunoaștere scrisă, în aproximativ o oră

Fiecare oră de mai jos vine direct din log-urile hPanel și din transcript-urile chat-ului de suport, păstrate exact așa cum au fost primite.

1
07.08.2026 · 18:25 CEST
manager.php marcat și trunchiat, pe 2 conturi, același minut
Fără avertisment anterior. Fără backup înainte de acțiune. Statusul trece direct la "Removed". Nici măcar jurnalul intern nu e complet consecvent: flag-ul e înregistrat la 16:25:03 UTC (18:25:03 CEST), în timp ce înregistrarea de carantină apare separat, în jur de 17:52–17:53 CEST, un decalaj de ~30 de minute pe care l-a semnalat asistentul AI din proprie inițiativă, niciodată adresat ulterior de un om.
2
08.08.2026 · ~05:25 CEST
Descoperire: pagină albă acolo unde era panoul de administrare
Trec aproximativ 11 ore între ștergere și momentul în care cineva află, pentru că nimeni nu a fost anunțat.
3
08.08.2026 · ~05:40 CEST
Cauza identificată: Malware Scanner, "Actions taken: Removed"
Log-ul de securitate hPanel confirmă acțiunea automată. Fără rule ID, fără fragment de cod, fără scor de încredere atașat.
4
08.08.2026 · ~06:05 CEST
Suportul uman confirmă: nu s-a făcut backup înainte de trunchiere
Asistentul AI e escaladat după ce se contrazice singur pe faptul dacă cele două hash-uri au fost măcar comparate.
5
08.08.2026 · ~06:22 CEST
Suportul confirmă: cleanup automat, fără carantină, fără review uman înainte de acțiune
Fișierele se execută în milisecunde, spun ei, deci sistemul e construit să distrugă întâi și să explice după.
6
08.08.2026 · ~06:39 CEST
Suportul declară explicit: nicio compensație pentru fals-pozitive confirmate ale scannerului
Soluția oferită e același "backup zilnic" care deja nu a acoperit exact fereastra în care s-a întâmplat acest incident.
// cu cuvintele lor

Opt recunoașteri directe, nimic parafrazat

Tot ce urmează în această secțiune e citat exact așa cum a fost scris de echipa Hostinger, în chat-ul de suport. Fără editare, fără interpretare. Citește-le în ordine și imaginea se construiește singură.

Transcript 01/08

"When custom or commercial management scripts contain encoded, password-protection, or obfuscated execution patterns, security scanners like Monarx can identify them as unknown web shells or false positives during automated signature updates."

Despre motivul detecției · 08.08.2026, 06:17 CEST
Transcript 02/08

"Automated cleanup neutralizes threats immediately by truncating flagged files to 0 bytes to prevent execution. The scanner does not generate an isolated backup prior to cleanup, so account backups or external backups are required for restoration."

Despre procesul de trunchiere, fără backup, prin design · 08.08.2026, 06:22 CEST
Transcript 03/08

"When Monarx deploys a global signature update across our infrastructure, an automated scan runs across all hosted accounts simultaneously against the new detection heuristics. Because the updated rule checked for specific obfuscation/execution patterns rather than file modification timestamps, it flagged matching code structures across separate accounts at that exact same time."

Recunoașterea care închide cazul: a fost un scan în masă, nu o decizie per-fișier · 08.08.2026, 06:34 CEST
Transcript 04/08

"Because potential web shells can execute malicious actions in milliseconds, the scanner truncates flagged execution patterns right away to protect the broader server infrastructure, rather than placing files in an unblocked holding state."

Despre motivul pentru care nu există stare de carantină, doar distrugere-întâi · 08.08.2026, 06:46 CEST
Transcript 05/08

"While we don't offer financial compensation for scanner false positives, we do provide automated backup tools in hPanel so you can quickly restore original file versions whenever code changes or security events occur."

Despre compensație pentru fals-pozitive confirmate: niciuna · 08.08.2026, 06:46 CEST
Transcript 06/08

"You are correct about the specific timing for that individual daily run: since the file was neutralized at 18:25, the daily snapshot taken at 06:23 the following morning would indeed capture the file in its post-cleanup state."

Despre dacă propriul lor "backup zilnic" ar fi ajutat exact în acest caz: nu, ar fi salvat fișierul deja gol · 08.08.2026, 07:00 CEST
Transcript 07/08

"The Malware cleaned indicator in hPanel displays a 30-day historical log of scanner actions. It serves as an audit trail and will clear automatically as clean daily scans run."

Despre motivul pentru care avertismentul "Malware cleaned" rămâne vizibil după închiderea cazului · 08.08.2026, 07:13 CEST
Transcript 08/08

"To be completely direct with you: a vendor-level or publisher-level allowlisting program is not currently planned or under active policy review. [...] Policy ownership: Infrastructure & Security owns security policy, and their current framework strictly uses hash-based allowlisting."

Despre existența unui plan de allowlisting la nivel de vendor: nu, și nimeni nu răspunde de schimbarea asta · 08.08.2026, 07:27 CEST
// contradicția

Agentul AI de suport, prins contrazicându-se singur, în același chat

Înainte ca un om să intre în conversație, asistentul AI de suport ("Kodee") a fost întrebat să explice detecția. La început a susținut că cele două fișiere marcate aveau "different SHA-256 hashes", sugerând că a comparat înregistrări reale de hash.

Două mesaje mai târziu, întrebat dacă detecția a fost cauzată de un update de semnătură pe partea scannerului, același asistent a spus că înregistrările disponibile nu conțineau deloc date de hash de comparat. Ambele afirmații nu pot fi adevărate simultan. Citește schimbul de mai jos, needitat.

kodee · chat, 05:53 AFIRMĂ CĂ HASH-URILE AU FOST COMPARATE
[Kodee] I found the following account-level facts: [...] They have different SHA-256 hashes, so the scanner evaluated two distinct file contents. Both were classified as malicious and quarantined, not cleaned.
kodee · chat, 05:54 AFIRMĂ CĂ NU EXISTĂ DELOC DATE DE HASH
[Kodee] I cannot confirm a Monarx ruleset update at August 7, 2026, 18:25 CEST. The available scanner records contain no engine version, signature ID, heuristic name, matched function, or before/after file hash, so they also cannot prove this was scanner-side rather than file-side.
kodee · chat, 05:58 CONTRADICȚIE RECUNOSCUTĂ
[Kodee] You're right to challenge that inconsistency. The current file hashes were present; what was unavailable was any historical before/after hash comparison. My later wording incorrectly implied that no hash data existed, and I apologize.

Un strat de suport construit să sune încrezător înainte de a verifica dacă poate fi va produce exact asta: două răspunsuri care se anulează reciproc, la trei minute distanță. Clientul a prins singur contradicția și a trebuit să ceară un om, înainte ca cineva cu acces real la log-uri să se implice.

// eșecuri structurale

Șapte lucruri greșite în sistemul însuși, nu doar în acest incident

Fiecare punct de mai jos e un fapt confirmat, scris, despre cum e proiectat sistemul să se comporte, de fiecare dată, pentru oricine găzduiește software custom pe această infrastructură. Nimic din asta nu e opinie.

1
Fără carantină, fără stare de așteptare
Fișierele marcate sunt trunchiate imediat. Nu există o stare de tip "dezactivat dar păstrat", pe care un dezvoltator s-o poată inspecta și contesta înainte ca conținutul să dispară definitiv.
2
Fără backup înainte de ștergere
Un sistem care e pe cale să distrugă permanent singura copie a unui fișier, pe baza unei ghiciri automate, nu face o captură a ceea ce distruge, înainte. Confirmat, în scris, de suport.
3
"Backup zilnic" nu acoperă fereastra reală de risc
Un backup zilnic e o singură captură, la o oră fixă. Orice muncă făcută după acea captură și înainte de un incident de tip fals-pozitiv nu are nicio protecție, iar scannerul acționează în milisecunde, fără nicio corelare cu momentul ultimului backup. Confirmat, în scris, pentru exact acest incident: din moment ce fișierul a fost neutralizat la 18:25, captura automată de a doua zi dimineață ar fi surprins pur și simplu fișierul deja gol, nu o versiune funcțională.
4
Allowlisting-ul funcționează doar pe hash exact de fișier
Modifici un singur caracter într-un fișier aflat în dezvoltare activă și hash-ul se schimbă odată cu el. Protecția dispare în momentul în care salvezi. Protejează o fotografie a fișierului, nu produsul.
5
Fără încredere la nivel de vendor, fără pre-înregistrare
Confirmat direct: nu există niciun program prin care un dezvoltator să-și înregistreze software-ul în avans, ca viitoarele update-uri de semnătură să-l sară. Procesul e strict reactiv: afli după ce ai pierdut deja ceva. Întrebat direct dacă asta e măcar în discuție, răspunsul propriu al Hostinger a fost că un program de allowlisting la nivel de vendor sau publisher nu e în prezent planificat și nici sub revizuire activă de politică.
6
Niciun model de compensație pentru fals-pozitive confirmate
Chiar și după ce recunoaște că fișierul era legitim și ștergerea a fost o greșeală, singura soluție oferită e același sistem de backup care deja nu a reușit să prevină pierderea.
7
Cod sursă complet cerut printr-un link public, ca precondiție
Înainte de a accepta allowlisting-ul, suportul a cerut "the file content/code, shared securely via pwpush.com": sursa completă a unui produs comercial, printr-un instrument public de partajare de linkuri, ca o condiție pentru ajutor de bază. Cererea a fost refuzată; s-a oferit în schimb un hash SHA256, acceptat în final.
// ce ar trebui să se întâmple în schimb

Nimic din asta nu necesită tehnologie nouă, doar o decizie de design diferită

Fiecare punct de mai jos e o practică standard, deja folosită în altă parte în industria de securitate. Nimic din asta nu e exotic sau scump de construit.

Reține, apoi notifică, în loc de distrugere pe loc
Dezactivează execuția (chmod, redenumire, sandbox) în loc să distrugi conținutul. Un fișier care nu poate rula e la fel de sigur ca unul care nu mai există, dar poate fi revizuit și restaurat.
Snapshot înainte de orice acțiune distructivă, mereu
O singură copie a fișierului marcat, păstrată 30 de zile, costă aproape nimic ca stocare și elimină complet riscul de pierdere de date din orice fals-pozitiv.
Publică rule ID-ul sau semnătura la cerere
Un client al cărui produs a fost distrus are un interes direct să știe exact ce a declanșat flag-ul. Tratarea asta drept "telemetrie internă" protejează vendorul, nu clientul.
Un registru de încredere la nivel de vendor
În loc să faci allowlist pe un singur hash exact, lasă un dezvoltator verificat să-și înregistreze identitatea produsului, ca versiunile noi ale propriului software să fie de încredere implicit, nu marcate de la zero de fiecare dată.
Resetează starea dashboard-ului după un fals-pozitiv confirmat
Un avertisment "Malware cleaned" care rămâne vizibil după ce cazul e închis și fișierul restaurat spune fiecărui viitor agent de suport, și clientului, că ceva e încă greșit. Nu e. Explicația proprie a Hostinger e că indicatorul e un jurnal istoric de 30 de zile, păstrat ca urmă de audit, care se șterge automat pe măsură ce rulează scanări zilnice curate, ceea ce întărește exact argumentul pentru a afișa acel context direct, nu pentru a lăsa un avertisment gol care se citește drept nerezolvat.
Un proces de remediere definit, nu bunăvoință de la caz la caz
Acum, remedierea pentru un fals-pozitiv confirmat depinde complet de care agent de suport preia chat-ul și cât de departe e dispus clientul să insiste. Noroc, nu politică.
// analiza completă

De ce contează pentru orice dezvoltator care își găzduiește propriul produs

Un fișier stricat e partea cea mai mică din toată povestea asta. Miezul e ce se întâmplă în momentul în care produsul tău arată, structural, ca lucrul de care software-ul de securitate e antrenat să se teamă.

Orice instrument custom care administrează fișiere, primește upload de conținut, editează cod live, sau execută comenzi pe un server, exact tipul de funcționalitate pe care nenumărați dezvoltatori o construiesc pentru propriile panouri de administrare, se potrivește heuristic cu semnătura unui web shell suficient de mult încât un scanner automat nu poate face mereu diferența. Diferența dintre "instrument intern legitim" și "backdoor malițios" poate fi zero la nivel de cod.

Asta singură ar fi doar o problemă tehnică grea. Ce o transformă într-o problemă structurală e felul în care e construit răspunsul în jurul acestei incertitudini: distruge întâi, în milisecunde, fără snapshot, fără stare de așteptare, și fără nicio cale ca proprietarul real al fișierului să spună ceva înainte ca acesta să dispară.

· · ·

Dashboard-ul afișează "Backups: Daily" de parcă asta ar rezolva problema. Nu o rezolvă. Un backup zilnic e o singură captură, la un moment fix, de obicei dimineața. Orice muncă făcută după acea captură și înainte de un incident nu are nicio plasă de siguranță, iar scannerul nu are nicio informație despre momentul ultimului backup atunci când decide să acționeze.

Un dezvoltator care lucrează activ la un fișier critic, exact situația de aici, poate pierde ore sau zile de muncă recentă, indiferent că are "backup zilnic" activat, pur și simplu pentru că politica de backup a providerului și politica de securitate a scannerului nu au fost gândite niciodată să comunice între ele.

· · ·

Gravitatea aici nu a rămas constantă. A escaladat cu fiecare răspuns. Ce părea la început un fișier șters greșit s-a dovedit a fi un scan în masă, aplicat identic pe fiecare cont găzduit, indiferent cât de vechi sau cât de recent modificat era fiecare fișier.

Apoi s-a dovedit că "plasa de siguranță" a backup-urilor zilnice are o gaură integrată, care nu acoperă aproape pe nimeni care lucrează zilnic la propriile fișiere. Apoi s-a dovedit că allowlist-ul oferit ca soluție se rupe la următoarea modificare de cod, protejând o versiune a fișierului, nu produsul. Apoi s-a dovedit că nu există absolut nicio cale proactivă, doar una reactivă: trimiți un hash după ce ai fost deja ars, și speri că următorul update de semnătură nu te arde din nou.

· · ·

Nimeni de la Hostinger nu și-a propus să distrugă produsul unui client; rea-voința nu e problema aici. Problema e un model de securitate care, prin design, nu poate distinge fiabil între software legitim activ dezvoltat și o amenințare, și care nu are niciun mecanism structural s-o rezolve pe termen lung, doar reparații de la caz la caz, după fapt.

Cea mai clară recunoaștere scrisă a asta a venit spre finalul firului, de la un agent uman, în cuvinte simple: reprezintă un risc operațional continuu pentru modelul de distribuție software al clientului. Nu un inconvenient de moment. Un risc continuu, recunoscut în scris, fără nicio soluție planificată.

Pentru un dezvoltator junior care citește asta: lecția nu e "nu construi instrumente de administrare". E că orice file manager, handler de upload, sau executor de comenzi pe care îl construiești, chiar complet autentificat și cu acces controlat, are nevoie de un plan pentru ce se întâmplă dacă securitatea automată a hostului tău decide vreodată că arată suspect, pentru că "e legitim" nu e o apărare pe care un scanner o înțelege.

Pentru un dezvoltator senior sau un lead tehnic care evaluează furnizori de hosting: întreabă, înainte să semnezi orice, ce face securitatea automată a providerului tău în momentul în care marchează unul dintre fișierele tale. Întreabă dacă există o stare de așteptare. Întreabă dacă există un snapshot înainte de ștergere. Întreabă cum arată remedierea pentru un fals-pozitiv confirmat. "Îl trunchiem și tu restaurezi din propriul backup" e o răspundere pe care ți-o asumi în numele fiecărui produs pe care îl găzduiești acolo, deghizată în funcție.

// litera mică

Contractul răspunde deja la întrebarea pe care ar pune-o un avocat

Aceste clauze provin direct din Universal Terms of Service Agreement și Hosting Agreement ale Hostinger, ambele publicate public. Niciuna nu e neobișnuită pentru un furnizor de hosting, luată separat, dar împreună arată exact cât de multă răspundere stă, implicit, pe partea clientului.

Backup-ul e explicit treaba clientului
Direct din Hosting Agreement: Hostinger nu răspunde pentru fișierele și datele din cont, iar clientul trebuie să-și mențină propriile backup-uri, indiferent de orice backup automat oferit "as a courtesy."
Răspunderea exclusă pentru orice pierdere de date
Termenii de Serviciu exclud răspunderea pentru "any loss of data, whether due to hardware and/or software issues, unauthorized access or any other unforeseen circumstances". Formularea asta, singură, e suficient de largă cât să acopere exact acest incident.
Răspunderea exclusă pentru scanarea în sine
O clauză separată exclude răspunderea pentru "any review, scanning, access to Services (including any hosted environment)". Asta acoperă, în scris, exact acțiunea de scanare care a distrus fișierul.
Răspunderea exclusă chiar și pentru acțiunea de ștergere
Aceeași secțiune exclude răspunderea pentru viruși "including any removal or attempted removal thereof". Asta acoperă chiar propriul lor proces de ștergere, indiferent dacă amenințarea era reală sau fals-pozitivă.
Despăgubiri plafonate, termen scurt de depunere
Chiar și în cel mai bun scenariu legal, răspunderea totală e plafonată la taxele plătite în ultimele 12 luni sau 10.000 EUR, oricare e mai mic, iar orice cerere trebuie depusă în 12 luni de la apariția ei.
Legea Luxemburg, și fără protecția consumatorului
Acordul e guvernat de legea Luxemburg, nu de legea daneză, iar clientul e tratat ca partener B2B, deci regulile UE de protecție a consumatorului (Directiva 2005/29/EC) nu se aplică.

Sursă: Universal Terms of Service Agreement și Hosting Agreement ale Hostinger, publicate public, valabile la data redactării.

// registrul oficial

Propriile lor raportări și politici publice spun altceva

Cele două puncte de mai jos nu vin din chat-ul de suport. Vin din propriile raportări legale publice ale Hostinger și din politicile lor publicate, și contrazic, în scris, chiar temelia pe care s-a construit acest caz.

O raportare publică către UE arată zero acțiuni prin "detecție automată", vreodată
În raportul oficial de transparență conform Digital Services Act al UE, care acoperă perioada 17 februarie 2024 – 16 februarie 2025 și a fost publicat pe 30 mai 2025, Hostinger declară 6.875 de acțiuni auto-inițiate asupra conținutului în perioada raportată, 34 dintre ele pentru malware, și nu listează niciuna dintre ele ca fiind declanșată prin "automated detection". Asta contrazice direct explicația de suport oferită în acest caz: un scanner care acționează exclusiv pe cont propriu, "în milisecunde", fără nicio verificare umană înainte ca fișierul să fie distrus.
Propria lor politică de abuz promite avertisment întâi, doar nu din partea acestui scanner
Politica publicată de Hostinger pentru gestionarea abuzurilor spune că, pentru un domeniu compromis sau hacked, raportat de un terț, "a warning will be sent to the domain registrant", iar suspendarea urmează doar "if the registrant fails to remove the unauthorized content". Exact opusul a ce s-a întâmplat aici: conținutul marcat de propriul lor scanner intern nu a primit niciun avertisment și nicio fereastră de remediere, doar distrugere imediată.

Surse: Raportul de transparență Digital Services Act al UE al Hostinger 2024–2025 (raportare publică, perioada 17 februarie 2024 – 16 februarie 2025, publicat pe 30 mai 2025) și Politica de gestionare a abuzurilor publicată de Hostinger (hostinger.com/legal/abuse-policy), ambele valabile la data redactării.

Cuvintele scrise chiar de furnizorul de hosting: "this represents an ongoing operational risk" pentru software legitim, fără nicio soluție planificată.
Caz deschis · documentat integral · actualizat dacă poziția Hostinger se schimbă
TRACE