Ako ste od mene primili e-poruku koja upućuje na ovu stranicu, to je zato što se čini da vaše web-mjesto koristi verziju dodatka Drag and Drop Multiple File Upload for Contact Form 7 (WordPress dodatak naveden pod tim imenom na WordPress.org, autora codedropz, koji se u vašim datotekama nalazi na putanji /wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/) koja spada u zahvaćeni raspon poznatog sigurnosnog propusta. Ova stranica objašnjava u čemu je propust, kako uopće utvrditi odnosi li se na vaše web-mjesto, kako pravilno očitati svoju verziju te kako se ažurirati.

Napomena: ovo nije WooCommerce verzija. Isti autor objavljuje zaseban dodatak, „Drag and Drop Multiple File Upload for WooCommerce” (mapa drag-and-drop-multiple-file-upload-for-woocommerce), koji je drugačiji proizvod s vlastitim brojanjem verzija. Ako je dodatak u vašim datotekama WooCommerce verzija, a ne verzija za Contact Form 7, ova se stranica ne odnosi na njega. Sve što slijedi tiče se isključivo dodatka za Contact Form 7.

Prije svega, najvažnija činjenica o ovoj obavijesti: sama činjenica da je vaša verzija u zahvaćenom rasponu ne znači da je vaše web-mjesto izloženo. Propust opisan u nastavku dolazi do izražaja samo na web-mjestima koja imaju određenu vrstu polja za prijenos datoteka, a ja izvana ne mogu vidjeti kako su vaši obrasci konfigurirani:

  • Propust je dosežan samo na obrascu Contact Form 7 koji ima jedno od polja za prijenos datoteka ovog dodatka postavljeno da prihvaća bilo koju vrstu datoteke.
  • Polje koje ograničava vrste datoteka koje prihvaća na određene tipove (na primjer slike ili PDF-ove) nije izloženo ovom propustu, čak ni na zahvaćenoj verziji. Ograničavanje prihvaćenih vrsta ujedno je zadana postavka kad polje te vrste ne navede.

Verziju vašeg dodatka mogu očitati iz javne datoteke, ali ne mogu vidjeti konfiguraciju vaših obrazaca, pa je ova obavijest preventivno upozorenje, a ne potvrđen nalaz o vašem web-mjestu.

Riječ je o propustu CVE-2026-18781, ranjivosti u prijenosu datoteka bez potrebe za autentikacijom, dosežnoj kroz obradu prijenosa u dodatku. Zahvaća verzije 1.3.9.3 do 1.3.9.8, a ispravljena je u verziji 1.3.9.9. Ako koristite zahvaćenu verziju, ažurirajte Drag and Drop Multiple File Upload for Contact Form 7 na 1.3.9.9 ili noviju verziju, a redovito ažurirajte i sam dodatak Contact Form 7.

Nekoliko riječi o hitnosti, jer je ova obavijest uvjetna. Ako nijedno vaše polje za prijenos datoteka ne prihvaća bilo koju vrstu datoteke, ažuriranje je uobičajeno održavanje dodatka. Ako barem jedno takvo polje postoji, ažuriranje shvatite kao prioritet: u toj konfiguraciji propust bi mogao posjetitelju bez ikakvog računa omogućiti da na vaš poslužitelj spremi datoteku po vlastitom izboru, takve vrste da bi je poslužitelj mogao izvršiti, što može dovesti do potpune kontrole nad web-mjestom.

Riječ je o propustu dodatka, a ne jezgre WordPressa, i odvojen je od samog Contact Form 7. Potpuno ažuriran WordPress i ažuriran Contact Form 7 ne štite vas ako je ovaj dodatak na zahvaćenoj verziji.

Je li ova poruka vjerodostojna?

Jest. Riječ je o dobronamjernoj obavijesti u duhu odgovornog objavljivanja, od nezavisnog sigurnosnog istraživača. Ne tražim od vas novac, lozinke ni pristup web-mjestu i nisam pokušao u njega provaliti, poslati bilo koji od vaših obrazaca niti na njega bilo što prenijeti.

Pogledao sam samo javno dostupne datoteke koje vaše web-mjesto poslužuje svakom posjetitelju (jednako kao što je vaša naslovnica javna) i zabilježio broj verzije koji objavljuje dodatak. Izričito nisam poslao nijedan obrazac, nisam prenio datoteku i nisam se približio funkciji dodatka za obradu prijenosa datoteka. Ništa u ovoj provjeri ne dira vaše podatke, vašu administraciju ni bilo koji privatni dio web-mjesta (više u odjeljku Što sam učinio, a što nisam u nastavku).

Ako želite provjeriti tko sam, kontakt podaci nalaze se na dnu ove stranice i na stranici O meni.

Zašto je to važno

Ovaj dodatak dodaje polja za povlačenje i ispuštanje datoteka (drag-and-drop) obrascima Contact Form 7, tako da posjetitelji mogu priložiti datoteke pri slanju obrasca: prijavu za posao, upit za podršku, fotografiju. Da bi to bilo sigurno, dodatak bi trebao odbijati opasne vrste datoteka.

U zahvaćenim verzijama ta se provjera mogla zaobići. Dodatak je pregledavao naziv poslane datoteke kako bi utvrdio je li vrsta dopuštena, zatim je naziv prilagođavao i spremao datoteku bez ponovne provjere prilagođenog naziva. Budući da je naziv mijenjan nakon što je odobren, mogao se sastaviti tako da inačica koja je provjeravana izgleda bezopasno, dok inačica koja je zapravo spremljena to nije bila, čime je nedopuštena vrsta datoteke mogla dospjeti na poslužitelj. Ondje gdje poslužitelj takvu datoteku potom tretira kao nešto što može izvršiti, posljedica je da se na vašem web-mjestu izvršava tuđa datoteka.

Iz toga proizlaze dvije stvari, koje vuku u suprotnim smjerovima. Prva je da je ovo važno samo ondje gdje obrazac ima polje za prijenos datoteka postavljeno da prihvaća bilo koju vrstu datoteke. Ondje gdje je svako polje za prijenos ograničeno na određeni skup vrsta, prerušena datoteka ne odgovara dopuštenoj vrsti i biva odbijena, pa web-mjesto u takvom stanju nije dosežno kroz ovaj propust. Druga je da ondje gdje polje koje „prihvaća sve” zaista postoji, nije potreban nikakav račun, nikakva lozinka niti bilo čija suradnja: obrazac je po svojoj namjeni javno dostupan.

Ovo opisujem na razini koja je vlasniku web-mjesta potrebna da bi postupio, i ništa dalje. Ne objavljujem pojedinosti koje bi nekome omogućile da to reproducira i molim vas da to ne pokušavate ni na vlastitom ni na tuđem web-mjestu. Provjera konfiguracije vaših obrazaca i broja vaše verzije, kako je opisano u nastavku, govori vam sve što trebate da biste odlučili što učiniti.

Ako je moja e-poruka navela ovaj propust, to znači da verzija koju vaše web-mjesto prijavljuje spada u zahvaćeni raspon. Nisam provjeravao je li baš vaše web-mjesto iskoristivo i ne mogu vidjeti kako su vaši obrasci konfigurirani. Sve što sam opazio jest verzija.

Jesam li zahvaćen?

O tome odlučuju dva pitanja, ovim redoslijedom.

Prvo: prihvaća li ijedno polje za prijenos „bilo koju vrstu datoteke”?

Ovo je ključno pitanje, a odgovoriti na njega možete samo vi. Provjera vlastitih obrazaca posve je sigurna i upravo je to smisao ove stranice.

  1. Prijavite se u nadzornu ploču WordPressa i u bočnoj traci otvorite Contact (Contact Form 7).
  2. Otvorite svaki obrazac koji nudi prijenos datoteke i pronađite polje za prijenos datoteka povlačenjem i ispuštanjem (polje ovog dodatka, dodano uz standardne oznake Contact Form 7).
  3. Provjerite ograničava li to polje vrste datoteka koje prihvaća.
  • Ako je svako polje za prijenos ograničeno na određene vrste (na primjer jpg, png, pdf), ovaj propust ne doseže vaše web-mjesto, čak ni na zahvaćenoj verziji. Ažuriranje je ipak vrijedno provesti kao uobičajeno održavanje.
  • Ako je ijedno polje za prijenos postavljeno da prihvaća bilo koju vrstu datoteke, propust se odnosi na vas i trebali biste žurno ažurirati. Ograničavanje tog polja na vrste koje doista trebate razuman je korak sam po sebi, ali ispravak je ažuriranje.

Molimo vas da ne pokušavate reproducirati problem ni na vlastitom ni na tuđem web-mjestu; to vam nije potrebno da biste odgovorili na pitanje iznad.

Drugo: koju verziju koristite?

Ne morate mi vjerovati na riječ. Kod ovog dodatka postoji jedan konkretan način provjere koji će vas zavarati, pa ovaj dio vrijedi pažljivo pročitati.

Iz administracije WordPressa (mjerodavan izvor):

  1. U nadzornoj ploči WordPressa idite na Dodaci, zatim Instalirani dodaci.
  2. Pronađite Drag and Drop Multiple File Upload - Contact Form 7, stavku čija je mapa drag-and-drop-multiple-file-upload-contact-form-7, i pogledajte verziju prikazanu ispod njezina naziva.

Iz javne datoteke opisa (bez prijave): otvorite u pregledniku vasadomena.hr/wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/readme.txt. Redak Stable tag: blizu vrha jest verzija koju vaša instalacija prijavljuje, a to je jedan od javnih izvora koje sam pročitao.

Iz izvornog koda vaše stranice (bez prijave): pogledajte izvorni kod neke stranice na svom web-mjestu i potražite jednu od datoteka dodatka namijenjenih klijentskoj strani, točno na ovim putanjama:

/wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/assets/css/dnd-upload-cf7.css?ver=...
/wp-content/plugins/drag-and-drop-multiple-file-upload-contact-form-7/assets/js/codedropz-uploader-min.js?ver=...

Broj uz ?ver= pridodan tim datotekama u toj mapi jest vlastita verzija dodatka. Kod ovog dodatka taj broj točno prati izdanje, zbog čega ga smatram pouzdanim izvorom.

Zamka koju ovdje treba izbjeći. Zaseban WooCommerce dodatak istog autora sadrži datoteku istog naziva, codedropz-uploader-min.js, u svojoj mapi (drag-and-drop-multiple-file-upload-for-woocommerce), s nepovezanim brojem verzije. Ako verziju očitavate iz izvornog koda stranice, provjerite je li mapa u putanji drag-and-drop-multiple-file-upload-contact-form-7, a ne WooCommerce mapa; u suprotnom ćete očitati verziju posve drugog proizvoda.

Zatim primijenite ovo pravilo, imajući na umu da se verzije uspoređuju brojčano, a ne abecedno:

  • 1.3.9.3 do 1.3.9.8: potencijalno zahvaćeno, ovisno o pitanju o polju za prijenos iznad. Ažurirajte odmah.
  • 1.3.9.9 ili novije: već ispravljeno u pogledu ovog propusta. Najbolji je potez preuzeti najnoviju dostupnu verziju.
  • Starije od 1.3.9.3: nije zahvaćeno ovim propustom. Konkretna slabost opisana iznad uvedena je u verziji 1.3.9.3. Ipak, tako staro izdanje uvelike zaostaje u svemu ostalom, pa je ažuriranje vrijedno provesti iz općih razloga.

Ako iz gornjih provjera ne možete dobiti čitljivu verziju, to nije neobično: dodaci za predmemoriranje ili optimizaciju rutinski uklanjaju vrijednost ?ver=, a ove se datoteke pojavljuju samo ondje gdje se dodatak učitava. Zaslon u administraciji iz prvog koraka uvijek daje odgovor.

Kako se nadograditi

Najsigurniji je put ažurirati se kroz sam WordPress, uz prethodnu sigurnosnu kopiju:

  1. Napravite sigurnosnu kopiju web-mjesta (datoteke i baza podataka) prije bilo kakvih promjena. Većina pružatelja hostinga nudi sigurnosne kopije u jednom kliku, ili upotrijebite dodatak za sigurnosne kopije WordPressa.
  2. U administraciji WordPressa idite na Nadzorna ploča, zatim Ažuriranja, ili na Dodaci, zatim Instalirani dodaci. Ako je navedeno ažuriranje za ovaj dodatak, instalirajte ga odavde.
  3. Ako vam je draža naredbena linija, WP-CLI radi isto: wp plugin update drag-and-drop-multiple-file-upload-contact-form-7 (naredba koristi naziv mape).
  4. Ako se ažuriranje ne pojavi, najnovije izdanje možete preuzeti izravno sa stranice dodatka u katalogu WordPress.org, Drag and Drop Multiple File Upload for Contact Form 7, i ažurirati preko Dodaci, zatim Dodaj novi dodatak, zatim Prenesi dodatak.
  5. Nakon ažuriranja potvrdite novi broj verzije (1.3.9.9 ili noviji) prema gornjim koracima i provjerite rade li vaši obrasci i prijenosi datoteka i dalje ispravno.

Kad ste već tu, vrijedi provjeriti jesu li jezgra WordPressa, Contact Form 7 i vaši ostali dodaci ažurni, jer isto načelo vrijedi za sve njih.

Nakon ažuriranja

Ažuriranje na verziju 1.3.9.9 ili noviju zatvara propust, i za većinu je web-mjesta to cijeli zadatak. Ova je stranica preventivna obavijest, a ne izvještaj o incidentu: nemam uvid u to je li se na vašem web-mjestu išta dogodilo i nisam gledao.

Jedan je slijedeći korak vrijedan razmatranja, i uvjetovan je istim pitanjem o polju za prijenos. Ako je vaše web-mjesto imalo obrazac s poljem za prijenos koje prihvaća „bilo koju vrstu datoteke” dok je koristilo zahvaćenu verziju, tada je barem teoretski bilo moguće da je datoteka spremljena na vaš poslužitelj. Ažuriranje zatvara propust, ali ne uklanja ništa što je možda već spremljeno, pa je u tom slučaju razumno poduzeti nekoliko uobičajenih mjera opreza:

  • Pregledajte mapu s prenesenim datotekama (obično pod wp-content/uploads/) tražeći datoteke koje ne prepoznajete, osobito one koje nisu vrsta dokumenata ili slika koje bi vaši obrasci trebali primati.
  • Pregledajte administratorske račune, nedavne prijave i sve aktivne sesije tražeći bilo što što ne možete objasniti.
  • Poništite lozinke na svojim administratorskim računima. Razuman je popratni korak i ponovno generiranje tajnih ključeva i „salts” vrijednosti WordPressa u datoteci wp-config.php (nove su vrijednosti udaljene jedan klik u službenom generatoru ključeva, a njihova zamjena jednokratno odjavljuje sve korisnike).

Ako pronađete nešto što vas zabrinjava, ispravan je odgovor postupiti kao kod svake druge sumnje na neovlašten pristup. Ako nijedan vaš obrazac nije imao polje za prijenos koje prihvaća „bilo koju vrstu datoteke”, samo je ažuriranje dovoljno.

Što sam učinio, a što nisam

Radi potpune transparentnosti o provjeri iza moje e-poruke: pročitao sam samo datoteke koje vaše web-mjesto ionako poslužuje svakom posjetitelju, konkretno javnu datoteku readme.txt dodatka, vašu naslovnicu i adrese resursa upisane na toj stranici. Nisam pristupio vašoj WordPress administraciji, bazi podataka ni bilo kojem privatnom dijelu web-mjesta.

Konkretno, nikada nisam poslao nijedan od vaših obrazaca, nikada nisam prenio datoteku i nikada nisam dirao funkciju dodatka za obradu prijenosa. Ništa nije poslano, testirano ni iskorišteno. To je ovdje važnije nego na većini ovih stranica, jer je prijenos datoteke upravo ona radnja koje se ovaj propust tiče, pa je „nisam je dirao” cijela razlika između objave i upada.

Također namjerno ne objavljujem pojedinosti koje bi nekome pomogle iskoristiti ovaj propust. Gornji opis staje na razini koja je vlasniku web-mjesta potrebna, i ne povezujem nikakav kôd za dokaz koncepta.

Ovo je opažanje utemeljeno na verziji: vaše web-mjesto prijavljuje verziju u zahvaćenom rasponu. To nije tvrdnja da je vaše web-mjesto u trenutku moje provjere bilo iskoristivo. Budući da propust ovisi o postavci obrasca koju ne mogu vidjeti, web-mjesto u tom rasponu vrlo dobro može uopće ne biti izloženo, a web-mjesto u tom rasponu može zasebno biti zaštićeno i drugim sredstvima, primjerice vatrozidom za web-aplikacije.

Nemam webmastera / zapeo sam

Ako web-mjesto ne održavate vi, proslijedite ovu stranicu osobi koja to čini (vašem programeru, agenciji ili pružatelju hostinga). Gornje će korake brzo prepoznati.

Ako web-mjesto održavate sami i zapnete, rado ću vas besplatno usmjeriti u pravom smjeru. Javite se putem kontakata u nastavku.

Kontakt

Evan Harris, sigurnosni istraživač

Javljam se povodom ovakvih pitanja isključivo kako bih pomogao operaterima da osiguraju svoja web-mjesta. Ako ne želite da vas ponovno kontaktiram, samo mi recite i poštovat ću to.

Izvori

Službene objave i praćenje

Proizvođač / dodatak