← Të gjithë artikujt

WordPress 7.1.4 rregullon 22 dobësi, përfshirë RCE gjatë përditësimit

WordPress 7.1.4 rregullon 22 dobësi, përfshirë RCE gjatë përditësimit

WordPress 7.1.4, i publikuar më 28 tetor 2026, rregullon 22 cenueshmëri të trajtuara në 17 njoftime sigurie. Kjo është një rritje e konsiderueshme krahasuar me WordPress 7.1.3, i cili trajtoi shtatë cenueshmëri tri javë më parë. Shumica e dobësive të reja kërkojnë një llogari ekzistuese, zakonisht një me rolin Contributor, por dy prej tyre mund të ekspozojnë informacione ose funksionalitete pa autentikim. Më seriozja është një race condition, domethënë një dështim sigurie i shkaktuar nga operacione me kohëzim shumë të saktë, që mund të çojë në remote code execution (RCE), ose në ekzekutimin e kodit në server-in e prekur, ndërsa WordPress po përditësohet.

Disa njoftime lidhen me stored cross-site scripting (stored XSS), ku kodi i dëmshëm për browser ruhet në përmbajtjen e faqes dhe ekzekutohet kur një person tjetër hap faqen e prekur. Përdoruesit e nivelit Contributor mund të shfrytëzonin dobësi që përfshinin whitespace te block delimiter, selective refresh të Customizer, formatimin e Categories block, etiketat e Comments Pagination dhe Post Navigation Link, si dhe disa pjesë të Interactivity API. Kushtet e tjera ndryshonin: problemi i Interactivity Router kërkonte një llogari Author me leje për të ngarkuar skedarë, ndërsa ekrani për fshirjen e të dhënave personale kërkonte një llogari Editor dhe që një administrator të hapte Tools, pastaj Erase Personal Data. Një rregullim hardening për multisite trajton emrat e përdoruesve pa escaping që përmbajnë markup, kur këta emra ruheshin nga diçka jashtë WordPress core dhe shiheshin nga një administrator rrjeti.

RCE gjatë procesit të përditësimit nuk kërkon llogari, por Patchstack e përshkruan shfrytëzimin si jopraktik, sepse sulmuesi duhet të veprojë brenda një intervali që zgjat vetëm pak sekonda. Gjatë instalimit ose përditësimit, WordPress nxjerr një paketë software-i në wp-content/upgrade/, një direktori që mund të publikohet nga web server-i. Para versionit 7.1.4, dosja e saj e përkohshme trashëgonte nga paketa një emër të parashikueshëm. Pastrimi fillestar gjithashtu hiqte gjithçka në atë direktori, përfshirë skedarin index.php që zakonisht parandalon listimin e direktorive.

Prandaj, për ato pak sekonda, një instalim i nxjerrë i WordPress mund të ekzistonte në një adresë të parashikueshme dhe potencialisht të shfletueshme. Ai përfshinte wp-admin/setup-config.php, i cili mund të nisej pa konfigurimin e faqes origjinale. Nëse një sulmues arrinte te ky skedar në momentin e duhur, mund të ekzekutonte instaluesin duke përdorur një database nën kontrollin e vet, ndërkohë që skedarët mbeteshin brenda document root të faqes së viktimës. Patchstack e vlerësoi çështjen me AC:H, që do të thotë kompleksitet i lartë sulmi, por vuri në dukje se ajo nuk kërkon as llogari dhe as ndërveprim nga përdoruesi, ka ekzistuar që nga WordPress 2.8 dhe rishfaqet gjatë çdo përditësimi, përfshirë përditësimet pa mbikëqyrje.

WordPress 7.1.4 i shton 16 karaktere të rastësishme emrit të direktorisë së përkohshme, rikthen index.php dhe ndalon fshirjen e këtij skedari. Patchstack gjeti gjithashtu një ndryshim të veçantë në update-core.php, i cili e vendos wp-config.php në listën e skedarëve që nuk duhet të kopjohen kurrë nga working directory. Një firewall që funksionon përmes PHP nuk mund ta interceptojë kërkesën e cenueshme, sepse paketa e nxjerrë ngarkon skedarët e vet të WordPress dhe arkivi zyrtar nuk përmban direktori mu-plugins nga e cila mund të ekzekutohet firewall i faqes. Prandaj, Patchstack këshillon bllokimin e aksesit web te wp-content/upgrade/ në nivelin e web server-it dhe konfirmimin se vizitorët nuk mund të listojnë përmbajtjen e saj.

Shtatë nga 17 njoftimet përfshijnë Interactivity API, sistemin që WordPress përdor për t'u shtuar blocks sjellje në anën e browser-it. Burimi i tyre i përbashkët ishte KSES, sistemi i filtrimit i WordPress që kontrollon se cilin HTML mund të ruajnë përdoruesit pa të drejta të pakufizuara publikimi. KSES lejonte çdo atribut dhe vlerë data-*, ndërsa direktivat e Interactivity përdorin atribute si data-wp-interactive, data-wp-context dhe data-wp-bind--href. Një Contributor mund t'i ruante këto direktiva në një postim, pas së cilës browser-i i vizitorit do t'i përpunonte ato.

Problemet që rezultonin përfshinin bindings që krijonin adresa javascript:, bindings të event-handler që refuzoheshin tashmë nga ana PHP dhe keys të rezervuara si __proto__ që hynin në një context merge dhe shkaktonin prototype pollution, i cili ndryshon vetitë e trashëguara nga objekte të tjera të browser-it. Dobësi të tjera lejonin që bindings në elementet object të anashkalonin kontrollet ekzistuese të të dhënave dhe të tipit. Një CSS parser gjithashtu përsëriste përpunimin në çdo iteracion, duke krijuar një denial of service që ngrinte tab-in e browser-it të vizitorit dhe jo server-in. Versioni 7.1.4 bën që KSES të heqë bindings që do të ndryshonin një vlerë të validuar, kufizon bindings të elementeve object në PHP directive processor dhe bën që browser runtime të refuzojë target-et e pasigurta. Interactivity browser runtime mbërriti në WordPress 6.4, një version para PHP class në 6.5, ndaj WordPress i liston të dy versionet si të prekura nga i njëjti numër problemesh.

Një dobësi tjetër lejonte që përmbajtja e postimit të linte në hije të dhënat e Script Module. Interactivity API përdorte getElementById(), i cili kthen elementin e parë që mban ID-në e kërkuar, pavarësisht tipit të tij. Meqë WordPress i vendoste të dhënat e vërteta të script-it në wp_footer pas postimit, përmbajtja me një ID që përputhej mund të shfaqej e para dhe t'i jepte runtime state-in. Versioni 7.1.4 tani verifikon që elementi i zgjedhur është vërtet një element script.

U korrigjuan gjithashtu dy probleme të Customizer. Selective refresh u besonte atributeve data-customize-partial-* në përmbajtjen preview dhe ia kalonte një selector të dhënë funksionit $() të jQuery. Një vlerë që fillonte me shenjën më të vogël se mund të trajtohej si HTML për t'u krijuar, në vend që të trajtohej si selector për kërkim. Rregullimi përdor .find(), i cili interpreton vetëm selectors. Veç kësaj, një kërkesë preview pa një changeset UUID mund të merrte changeset-in më të fundit të papublikuar pa kontrolluar se kush e kishte krijuar ose nëse vizitori kishte leje. Kjo ekspozonte identifikuesin e tij dhe e shfaqte preview në mënyrë anonime, megjithëse ndryshimi i vlerave të tij kërkonte ende lejet përkatëse. WordPress 7.1.4 tani kërkon capability customize.

Tri rregullime të lidhura me blocks trajtojnë përmbajtjen që riinterpretohej pas filtrimit. Categories block fuste një etiketë dropdown të filtruar në një format string të sprintf(), duke u lejuar direktivave të formatimit të zgjeroheshin më pas. Image dhe Playlist blocks përdornin tekst të ndikuar nga sulmuesi si replacement për preg_replace(), ku PHP mund të zgjeronte referenca si $0 dhe të fuste një tag brenda atributit të një tag-u tjetër. Të dy tani përdorin HTML API. Comments Pagination dhe Post Navigation Link blocks tani aplikojnë escaping për atributet e tyre label përpara output-it.

Dobësia e block delimiter u shfaq sepse PHP parser i server-it dhe JavaScript parser i editor-it nuk pajtoheshin për whitespace. JavaScript njihte hapësirat e pandashme, disa hapësira Unicode dhe një byte order mark që PHP nuk i njihte. Si pasojë, një delimiter i formuar posaçërisht mund të ishte një koment inert në server, por një block i vërtetë me atribute të kontrolluara nga sulmuesi në editor. Versioni 7.1.4 i kufizon të gjithë parsers te të njëjtat pesë karaktere whitespace.

Disponueshëm edhe në: EnglishDeutschItaliano