Sigurnosna obavijest za Link Library
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 Link Library (WordPress dodatak autora Yannicka
Lefebvrea, koji se u vašim datotekama nalazi na putanji /wp-content/plugins/link-library/)
koja spada u zahvaćeni raspon poznatog sigurnosnog propusta. Ova stranica objašnjava u čemu je
propust, kako provjeriti koju verziju imate, kako se ažurirati i što učiniti nakon toga.
Riječ je o propustu CVE-2026-16532, SQL injekciji bez potrebe za autentikacijom, dosežnoj kroz obradu poslanih poveznica u dodatku. Zahvaća svako izdanje prije 7.9.3, a ispravljen je u verziji 7.9.3. Trenutačno je izdanje u vrijeme pisanja 7.9.4, koje također sadrži ispravak. Ako koristite bilo što starije od 7.9.3, ažurirajte Link Library na 7.9.3 ili noviju verziju.
Jedno treba jasno reći: nema starije verzije koja je sigurna. Ovo nije propust koji je u nekom trenutku povijesti dodatka uveden pa poslije ispravljen. Ranjivi je kôd prisutan u svakom objavljenom izdanju koje sam mogao provjeriti, sve do najstarije verzije koju katalog WordPress.org još poslužuje. „Moja je instalacija prestara da bi bila zahvaćena” ovdje nije izlaz. Jedine verzije koje nisu zahvaćene jesu 7.9.3 i novije.
Jednako je važno: ova obavijest ne ovisi o tome kako je vaše web-mjesto konfigurirano. Link Library uključuje obrazac koji posjetiteljima omogućuje predlaganje poveznica, a prirodna je pretpostavka da je web-mjesto izloženo samo ako je taj obrazac doista negdje postavilo na stranicu. Ta je pretpostavka pogrešna. Zahvaćeni se kôd izvodi pri svakom uobičajenom zahtjevu prema javnom dijelu web-mjesta, bez obzira na to jeste li ikada objavili obrazac za slanje, a tvorničke postavke dodatka to ne blokiraju. Ako vaše web-mjesto koristi zahvaćenu verziju, dosežno je. Točka.
Riječ je o propustu dodatka, a ne jezgre WordPressa. Potpuno ažuriran WordPress vas ne štiti ako je sam dodatak Link Library 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 mu bilo što niti bilo što iskoristiti.
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 ništa poslao značajki dodatka za slanje poveznica, ni na vašem ni na bilo kojem drugom web-mjestu, i 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
Link Library gradi i prikazuje kataloge poveznica na vašem web-mjestu i može primati prijedloge poveznica od posjetitelja. Obrada prijedloga mjesto je na kojem ovaj propust živi.
U zahvaćenim verzijama, kada dodatak obrađuje poslanu poveznicu, njegova provjera postoji li ta poveznica već gradi upit prema bazi podataka tako što poslane vrijednosti izravno lijepi u njega. Vrijednosti se čiste za prikaz, ali se ne izbjegavaju za upotrebu u SQL-u, a upit se izvodi bez pripremljene izjave. Posljedica je da posjetitelj koji nije prijavljen može izmijeniti taj upit i čitati podatke iz baze podataka vašeg web-mjesta. Verzija 7.9.3 upit prepisuje tako da koristi pripremljenu izjavu, čime se propust zatvara.
Da ponovim tvrdnju s vrha stranice, jer ona najvjerojatnije daje lažnu utjehu: izloženost ne ovisi o tome je li obrazac za slanje objavljen igdje na vašem web-mjestu. Putanja koda koja obrađuje poslane podatke osluškuje pri svakom zahtjevu prema javnom dijelu web-mjesta, a sve što je zahtjevu potrebno da bi do nje došao može se dobiti iz samog dodatka, bez ikakvog obrasca na bilo kojoj stranici. Je li vaše web-mjesto izloženo svodi se samo na jedno: na verziju koju koristite.
Vrijedi biti precizan i o tome što ovaj propust jest, a što nije. On napadaču omogućuje da čita podatke iz baze podataka. To je samo po sebi ozbiljno, jer baza podataka WordPressa sadrži stvari poput adresa e-pošte korisnika i raspršenih (hashiranih) lozinki, a na nekim web-mjestima i podatke o kupcima ili članovima. No to samo po sebi nije udaljeno izvršavanje koda, preuzimanje web-mjesta niti način da si napadač dodijeli administratorski račun. Uže je od propusta potpune kompromitacije o kojima pišem drugdje, a radije ću razmjere postaviti pošteno nego vas ostaviti sa strašnijim dojmom nego što ga činjenice podupiru.
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. Čitanje 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 je verzija koju vaše web-mjesto prijavljuje starija od 7.9.3. Nisam provjeravao je li baš vaše web-mjesto iskoristivo; sve što sam opazio jest verzija.
Jesam li zahvaćen?
Sve se svodi na jedno pitanje: koju verziju dodatka Link Library koristite?
U administraciji WordPressa (mjerodavan izvor):
- Prijavite se u nadzornu ploču WordPressa (obično
vasadomena.hr/wp-admin). - Idite na Dodaci, zatim Instalirani dodaci.
- Pronađite Link Library, stavku čija je mapa
link-library, i pogledajte verziju ispod njezina naziva.
Iz javne datoteke opisa (bez prijave): otvorite u pregledniku
vasadomena.hr/wp-content/plugins/link-library/readme.txt. Redak Stable tag: blizu vrha
jest verzija koju vaša instalacija prijavljuje, a to je ista javna datoteka koju sam pročitao.
Kod ovog sam dodatka provjerio da se podudara sa stvarno objavljenim kodom u svakom nedavnom
izdanju, pa je to pouzdana provjera.
Jedna provjera koja kod ovog dodatka ne radi, pa se molim vas nemojte na nju oslanjati.
Ako ste navikli verzije dodataka očitavati iz broja ?ver= pridodanog skripti ili stilskom
predlošku u izvornom kodu stranice, to će vas ovdje zavarati. Brojevi verzija na URL-ovima
resursa ovog dodatka zamrznute su verzije priloženih biblioteka trećih strana (vrijednosti
poput 4.0.1, 1.0.0 ili 1.3.9), ili verzija jezgre WordPressa. Nijedan od njih nije
verzija dodatka i uspoređivati bilo koji od njih sa 7.9.3 nema smisla. Koristite zaslon u
administraciji ili readme.txt.
Još jedan rubni slučaj: neke vrlo stare instalacije u svojoj datoteci readme.txt prikazuju
Stable tag: trunk. To uopće nije broj verzije. Ako to vidite, upotrijebite umjesto toga
zaslon s dodacima u administraciji i instalaciju smatrajte zahvaćenom dok vam zaslon ne kaže
drukčije, jer je instalacija dovoljno stara da piše trunk zasigurno starija od 7.9.3.
Zatim primijenite ovo pravilo:
- Bilo što starije od 7.9.3: zahvaćeno. Ažurirajte. Ne postoji granica ispod koje starije izdanje ponovno postaje sigurno.
- 7.9.3 ili novije: već ispravljeno. I 7.9.4, trenutačno izdanje, sadrži ispravak.
Kako se nadograditi
Dodatak je besplatan, i dalje objavljen i aktivno održavan, pa je ispravak obično ažuriranje. Najsigurniji je put ažurirati se kroz sam WordPress, uz prethodnu sigurnosnu kopiju:
- 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.
- U administraciji WordPressa idite na Nadzorna ploča, zatim Ažuriranja, ili na Dodaci, zatim Instalirani dodaci. Ako je navedeno ažuriranje za Link Library, instalirajte ga odavde.
- Ako vam je draža naredbena linija, WP-CLI radi isto:
wp plugin update link-library. - Ako se ažuriranje ne pojavi, najnovije izdanje možete preuzeti izravno sa stranice dodatka u katalogu WordPress.org, Link Library, i ažurirati preko Dodaci, zatim Dodaj novi dodatak, zatim Prenesi dodatak.
- Nakon ažuriranja potvrdite novi broj verzije (7.9.3 ili noviji) prema gornjim koracima i provjerite prikazuju li se vaši katalozi poveznica i dalje te ponašaju li se normalno.
Kad ste već tu, vrijedi provjeriti jesu li jezgra WordPressa i vaši ostali dodaci ažurni, jer isto načelo vrijedi za sve njih.
Nakon ažuriranja
Ažuriranje na 7.9.3 ili noviju verziju zatvara propust: provjera poslanih podataka sada se izvodi kao pripremljena izjava, pa se poslane vrijednosti tretiraju kao podaci, a ne kao dio upita.
Što ažuriranje ne može, izneseno pažljivo. Ažuriranje zaustavlja svako buduće čitanje iz vaše baze podataka. Ono ne može poništiti ono što je možda već pročitano dok je web-mjesto bilo na zahvaćenoj verziji. Nemam uvida u to je li se to na vašem web-mjestu dogodilo i nisam gledao; većina web-mjesta u zahvaćenom rasponu vjerojatno nikad nije bila dirana. No budući da vam to ne mogu reći sa sigurnošću, malo je opreza razumno, razmjerno onome što vaša baza podataka sadrži:
- Ako je vaše web-mjesto jednostavno izdavačko web-mjesto, gdje baza podataka sadrži vaše objave, stranice i nekolicinu korisničkih računa, razuman je korak zatražiti od svojih korisnika (a osobito administratora) da promijene lozinke. WordPress lozinke pohranjuje raspršene, a ne kao običan tekst, ali se raspršene vrijednosti slabih lozinki mogu razbiti izvan mreže, pa nova lozinka uklanja tu brigu.
- Ako vaše web-mjesto pohranjuje išta osjetljivije (podatke o članovima, podatke o kupcima, API ključeve ili druge pristupne podatke koje čuvaju dodaci), i njih smatrajte vrijednima zamjene.
- Ponovno generiranje tajnih ključeva i „salts” WordPressa u datoteci
wp-config.php(nove su vrijednosti udaljene jedan klik u službenom generatoru ključeva) jednom odjavljuje sve korisnike i poništava svaki ukradeni token sesije.
Da bude jasno kako je ovo postavljeno: riječ je o mjeri opreza, a ne o tvrdnji da su vaši podaci uzeti. Ova se obavijest temelji na broju verzije, a ne na bilo kakvom dokazu o napadu.
Što sam učinio, a što nisam
Radi potpune transparentnosti o provjeri iza moje e-poruke: pročitao sam samo javne datoteke
koje vaše web-mjesto ionako poslužuje svakom posjetitelju, konkretno javnu datoteku
readme.txt dodatka i vašu naslovnicu. Nisam pristupio vašoj WordPress administraciji,
bazi podataka ni bilo kojem privatnom dijelu web-mjesta.
Konkretno, nikada nisam ništa poslao značajki dodatka za slanje poveznica, ni na vašem ni na bilo kojem drugom web-mjestu. Ništa nije poslano, pohranjeno, testirano ni iskorišteno. To je ovdje važnije nego na većini ovih stranica, jer je obrada poslanih podataka upravo ono čega 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 da ovaj propust iskoristi. 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 stariju od 7.9.3. Web-mjesto u tom rasponu možda je već zaštićeno drugim sredstvima, primjerice vatrozidom za web-aplikacije ili unatrag prenesenim ispravkom. Ova obavijest nije tvrdnja da je vaše web-mjesto u trenutku moje provjere bilo iskoristivo.
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. Javite se putem kontakata u nastavku.
Kontakt
Evan Harris, sigurnosni istraživač
- E-pošta: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
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