
| Plugin-navn | Plugin README-parser | 
|---|---|
| Type af sårbarhed | Autentificeret gemt XSS | 
| CVE-nummer | CVE-2025-8720 | 
| Hastighed | Lav | 
| CVE-udgivelsesdato | 2025-08-15 | 
| Kilde-URL | CVE-2025-8720 | 
Godkendt bidragyder gemt XSS i README-parser (≤ 1.3.15) — Hvad webstedsejere og -udviklere skal gøre nu
Oversigt: En gemt Cross-Site Scripting (XSS) sårbarhed identificeret som CVE-2025-8720 påvirker WordPress-plugin'et "README Parser" versioner op til og med 1.3.15. Fejlen giver en godkendt bruger med bidragyderrettigheder (eller højere) mulighed for at indsprøjte HTML/JavaScript i indhold, der senere vil blive gengivet og udført. Dette indlæg forklarer risikoen, sandsynlige angrebsscenarier, hvordan du registrerer, om dit websted er påvirket, og konkrete afbødnings- og hærdningstrin - inklusive eksempler på WAF/virtual-patch regler, du kan anvende med det samme.
Vi er WP-Firewall sikkerhedsteamet. Vi beskytter tusindvis af WordPress-websteder og taler ud fra både incident-response og langsigtet hærdning. Nedenfor finder du pragmatiske råd til webstedsejere, udviklere og plugin-vedligeholdere.
Hurtige fakta
- Sårbarhed: Lagret Cross-Site Scripting (XSS)
 - Berørt software: README Parser-plugin til WordPress
 - Sårbare versioner: ≤ 1.3.15
 - CVE: CVE-2025-8720
 - Nødvendige rettigheder for at udnytte: Bidragyder eller højere
 - Sværhedsgrad / CVSS: Middel (rapporteret CVSS 6,5)
 - Officiel løsning: Ikke tilgængelig på udgivelsestidspunktet (anvend afhjælpning)
 - Udgivelsesdato: 15. august 2025
 - Reporterkredit: Forsker(e), der har videregivet ansvarligt
 
Hvad der skete – almindeligt sprog
README Parser-plugin'et accepterer en parameter med navnet mål der kan indeholde HTML-indhold eller data, der bruges til at bygge et README-lignende output. I versioner op til 1.3.15 renser eller koder plugin'et ikke korrekt upålidelig input fra godkendte brugere med bidragyderrettigheder. Fordi dette indhold gemmes (persisteres) og derefter gengives senere (serverside eller klientside), kan en ondsindet bidragyder indsætte HTML eller JavaScript, som udføres i konteksten af alle, der ser det gengivne output - inklusive webstedsadministratorer.
Dette er en gemt XSS (vedvarende) sårbarhed og er farligere end reflekteret XSS, fordi det indsprøjtede script findes i databasen og kan påvirke flere brugere gentagne gange.
Hvorfor dette er vigtigt for dit WordPress-websted
- Bidragyderkonti er almindeligt tilgængelige på fællesskabs- eller multi-autor-sider. Selvom bidragydere normalt ikke kan udgive indhold, kan de oprette og redigere indlæg og i nogle arbejdsgange indtaste metadata eller andre felter, som et plugin kan analysere.
 - Lagret XSS kan bruges til at:
- Stjæl administratorsessionscookies eller godkendelsestokens (hvis beskyttelsen er svag).
 - Udfør handlinger på vegne af et godkendt offer (via CSRF eller forfalskede administratoranmodninger).
 - Installer bagdøre eller webshells, hvis det kombineres med andre sårbarheder eller social engineering.
 - Vis vildledende indhold eller omdirigeringer på sider, hvor besøgende lander.
 
 - En vellykket gemt XSS mod en administrator, der ser de indsprøjtede data, kan føre til fuld overtagelse af webstedet.
 
Hvem bør læse dette
- Webstedsejere, der kører README Parser-plugin'et (≤1.3.15).
 - Administratorer med ansvar for blogs med flere forfattere eller medlemssider, hvor brugerne har bidragyderrettigheder.
 - Udviklere og plugin-udviklere leder efter sikre kodningsmønstre for at forhindre lignende problemer.
 - Webhosts og administrerede WordPress-udbydere implementerer virtuel patching på hostniveau.
 
Angrebsscenarier (realistiske)
- Fællesskabsblog med åbne tilmeldinger for bidragydere:
- Angriberen registrerer eller får en bidragyderkonto.
 - Sender indhold eller metadata med en udformet 
målparameternyttelast, der indeholder scriptbar HTML. - Senere besøger en administrator plugin'ets administratorside eller frontend-siden, der gengiver den parsede README-fil – det ondsindede script udføres i administratorens browser og udfører privilegerede handlinger.
 
 - Social engineering for at få en redaktør/forfatter til at se en bestemt side:
- Angriberen indsætter en nyttelast, der kører automatisk, når en editor forhåndsviser eller redigerer indhold. Scriptet kan i det stille udføre handlinger via administratorgrænsefladen (oprette administratorbruger, ændre indstillinger) ved at udstede XHR POST'er, hvis CSRF-beskyttelse kan omgås.
 
 - Massefordeling:
- Da injektionen gemmes, påvirker det skadelige indhold alle fremtidige seere af indholdet (abonnenter, redaktører, administratorer), hvilket øger den potentielle eksplosionsradius.
 
 
Hvad du skal gøre nu – trin for trin
Hvis du bruger WordPress og har README Parser-pluginnet (≤ 1.3.15) installeret, skal du udføre disse handlinger i rækkefølge:
- Øjeblikkelig inddæmning
- Begræns adgang til brugerroller, der kan oprette eller redigere de plugin-berørte felter. Deaktiver midlertidigt registrering af offentlige bidragydere, hvis det er muligt.
 - Hvis du har overvågning eller en adgangskontrolliste, skal du midlertidigt forhindre, at ikke-betroede konti får adgang til de administratorsider, der bruges af plugin'et.
 
 - Fjern eller deaktiver plugin'et (hvis du ikke har brug for det)
- Hvis plugin'et ikke er kritisk, skal du deaktivere og fjerne det, indtil en officiel patch udgives.
 - Hvis fjernelse ikke er mulig, skal du fortsætte med virtuel lappe/hærde i henhold til instruktionerne nedenfor.
 
 - Anvend virtuel patch (WAF/firewall)
- Implementer WAF-regler for at blokere skadelige nyttelast i 
målparameter eller andre input, der håndteres af plugin'et. Eksempler på effektive regler er inkluderet senere i dette indlæg. 
 - Implementer WAF-regler for at blokere skadelige nyttelast i 
 - Revider databasen og administratorbrugerne
- Søg efter nylige ændringer af readme-lignende indhold eller felter behandlet af plugin'et, der indeholder 
<script,en fejl=,javascript:eller andre mistænkelige tokens. - Kør en databaseforespørgsel for at finde poster med 
<scripteller mistænkelig HTML (eksempel på SQL vist nedenfor). - Tjek administratoraktivitetslogfiler, og se efter uventede kontoændringer, nye administratorbrugere eller ændringer af plugins.
 
 - Søg efter nylige ændringer af readme-lignende indhold eller felter behandlet af plugin'et, der indeholder 
 - Nulstil loginoplysninger
- Tving nulstilling af adgangskode for administratorer, og overvej at ugyldiggøre alle aktive sessioner. Roter API-nøgler, hvis der findes tredjepartsintegrationer.
 
 - Efter hændelsen: Opdater plugin
- Når en officiel, rettet udgivelse er tilgængelig, skal du opdatere med det samme. Hvis du har fjernet plugin'et, skal du kun geninstallere det efter at have bekræftet rettelsen.
 
 - Gennemgå privilegier og arbejdsgange
- Begræns, hvem der kan få rollene som bidragyder eller redaktør.
 - Flyt til gennemgang af arbejdsgange, der sikrer, at alle uploads og metafelter, der ikke er tillid til, renses, før de gengives.
 
 
Detektion – hvad skal man kigge efter
Søg i databasen og loggene for tegn på lagret XSS og relateret aktivitet.
Eksempel på SQL til at finde sandsynligt injiceret indhold (kør fra en betroet DBA-kontekst; sikkerhedskopier databasen først):
-- Søg i indlægsindhold og postmeta efter script-tags eller on*-attributter SELECT ID, post_title, post_date FROM wp_posts WHERE post_content LIKE '%
Søg i adgangslogfiler for mistænkelige forespørgselsstrenge:
- Søg efter anmodninger med 
mål=parametre, der indeholder kodedescriptstrenge:%3Cscript,%3Cimg,%3Con,%3Ciframe - Kig efter POST'er, der opretter eller redigerer indhold fra konti med lav rettigheder.
 
Logindikatorer:
- Admin-sider returnerer succesfulde handlinger kort efter en bidragyders redigering.
 - Flere forhåndsvisninger eller administratorvisninger af et bestemt indlæg foretaget af administratorer efter en bidragyderopdatering.
 
Kig efter indikatorer for kompromittering (IoC'er), såsom mistænkelige administratorkonti oprettet efter den formodede injektion, uventede plugin-filer, ændrede temaer eller cron-job.
Praktiske rettelser til hærdning og udviklere
Hvis du vedligeholder README Parser-pluginnet (eller et andet plugin, der accepterer og gengiver brugerleveret HTML), er her sikre kodningspraksisser:
- Rens input ved indtastning, escape ved output
- Gå aldrig ud fra, at indhold er sikkert. Rens brugerleveret input med det samme, når du gemmer, og escape ved output.
 - Brug WordPress API'er: 
sanitize_text_field(),esc_html(),esc_attr(),esc_url(), ogwp_kses()med tilladte HTML-tags. 
 - Brug wp_kses til kontrolleret HTML
array( 'href' => sand, 'title' => sand, 'rel' => sand, ), 'br' => array(), 'em' => array(), 'strong' => array(), 'p' => array(), 'ul' => array(), 'li' => array(), ); $clean_html = wp_kses( $input, $illadt ); ?> Note: "This appears to be gibberish and cannot be translated. If the context is objectionable, please provide the text and the two translations ...Undgå at tillade
på*attributter (f.eks.onclick,en fejl) ellerjavascript:/data:protokoller. - Håndhæv kapacitetstjek og noncekontrol
<?php if ( ! current_user_can( 'edit_posts' ) ) { return; } if ( ! isset( $_POST['my_plugin_nonce'] ) || ! wp_verify_nonce( $_POST['my_plugin_nonce'], 'my_plugin_save' ) ) { return; } ?> - Escape-output i alle kontekster
- Når du udskriver værdier i HTML-attributter: brug 
esc_attr(). - Når du udskriver URL'er: brug 
esc_url_raw()når man gemmer,esc_url()ved udskrivning. - Når du udskriver HTML: udskriv kun 
wp_kses()-saneret HTML. 
 - Når du udskriver værdier i HTML-attributter: brug 
 - Begræns felter, der accepterer rå HTML
Hvis
målHvis parameteren kun var beregnet til intern routing eller almindelig tekst, skal den konverteres til en slug eller et ID. Behandl den aldrig som HTML. - Brug indholdssikkerhedspolitik (CSP) som dybdegående forsvar
Anvend en CSP-header, der forbyder indlejrede scripts og eksterne, upålidelige kilder. Bemærk: CSP kan muligvis ødelægge legitim funktionalitet, hvis den er for strengt konfigureret, så test før udrulning.
Indholdssikkerhedspolitik: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; - Log og overvåg ændringer i indhold
Hold et revisionsspor over indlæg og metaændringer, inklusive bruger-ID og tidsstempel. Det fremskynder undersøgelsen, hvis noget injiceres.
 
Virtuel patching/WAF-regler, du kan implementere nu
Hvis en officiel plugin-opdatering endnu ikke er tilgængelig, er virtuel patching via en Web Application Firewall (WAF) den hurtigste måde at beskytte websteder i stor skala. Nedenfor er eksempler på regler for ModSecurity (kompatibel med mange WAF'er) og NGINX (Lua- eller ngx_http_rewrite_module-stil), der er målrettet mod ondsindede nyttelaster, der almindeligvis bruges i lagret XSS.
Vigtig: Disse er defensive filtre – juster dem for at undgå falske positiver på websteder, der legitimt tillader HTML.
Eksempel på ModSecurity-regelsæt (konceptuelt):
# Block suspicious script tags in 'target' parameter (URL or POST data)
SecRule ARGS:target "(?i)(%3C|<)\s*script" "id:100001,phase:2,deny,status:403,msg:'Blocked XSS attempt - script tag in target',log"
# Block javascript: and data: in URL-like inputs
SecRule ARGS:target "(?i)javascript:|data:text/html" "id:100002,phase:2,deny,status:403,msg:'Blocked XSS attempt - protocol in target',log"
# Block common on* event attributes inside parameters (encoded or plain)
SecRule ARGS:target "(?i)on\w+\s*=" "id:100003,phase:2,deny,status:403,msg:'Blocked XSS attempt - event handler attribute in target',log"
# Block suspicious encoded payloads (double-encoded 
NGINX (ved hjælp af ngx_lua eller en lignende tilgang) — pseudokode:
# hvis ngx_lua er tilgængelig, undersøg anmodningsargs access_by_lua_block { local args = ngx.req.get_uri_args() local target = args["target"] if target then local lower = string.lower(target) if string.find(lower, "  }
Regex-tips til oprettelse af signaturer:
- Opdage 
<script,<img.*onerror,på \w+\s*=,javascript:og kodede former%3Cscript,%3Cimg,%26lt;script,%253C. - Inkluder kontroller for almindeligt dobbeltkodede nyttelaster (
%25sekvenser). - Begræns reglerne til den/de specifikke parameter(er), som plugin'et bruger (f.eks. 
mål) for at reducere falske positiver. 
Hvis du kører et firewall-plugin på WordPress-niveau (server- eller plugin-baseret), skal du oprette en regel for at forbyde HTML-tags eller på* attributter inde i mål parameter og for at afvise eller rense dem, før de gemmes.
Kodestykker til sikker afhjælpning (rettelser på plugin-niveau)
Hvis du selv vedligeholder det berørte plugin og ønsker en hurtig afhjælpning inden en upstream-patch, skal du rense det. mål parameter ved lagring og escape ved output.
Eksempel PHP: desinficer før lagring
array('href' => sand, 'title' => sand)); $target_clean = wp_kses(wp_unslash($_POST['target']), $allowed); update_post_meta($post_id, 'plugin_readme_target', $target_clean); } ?>  Note: "$target_clean" er ikke en del af applikationen. Det er ikke en god idé at tilføje en specifik kode.
Udgang med sikkerhed:
<?php
$stored = get_post_meta( $post_id, 'plugin_readme_target', true );
// Use esc_attr if printing into an attribute, or esc_html if in text node
echo esc_html( $stored );
?>
Hvis mål værdi bruges til at opbygge en URL, valideres eksplicit med esc_url_raw() på gem og esc_url() på gengivelse.
Hændelsesrespons — når du har mistanke om kompromittering
Hvis du finder beviser på udnyttelse:
- Isoler stedet
- Sæt stedet i vedligeholdelsestilstand, og bloker offentlig adgang, hvis det er muligt.
 
 - Øjebliksbillede og sikkerhedskopiering
- Lav en fuld sikkerhedskopi (filer og database), før du ændrer noget.
 
 - Rengør det injicerede indhold
- Fjern al funden ondsindet HTML fra indlæg, postmeta og indstillinger.
 - Brug SQL-opdateringer omhyggeligt for at fjerne script-tags (sikkerhedskopier databasen først).
 
 - Revider brugere og nulstil legitimationsoplysninger
- Nulstil administratoradgangskoder og tvungen nulstilling af adgangskode for privilegerede konti.
 - Tilbagekald alle mistænkelige administratorbrugere.
 
 - Scan for persistens
- Tjek tema- og plugin-filer for nye eller ændrede filer.
 - Tjek planlagte opgaver (wp_cron) og wp-config.php for tilføjet kode.
 
 - Geninstaller plugins/temaer fra betroede kilder
- Erstat plugin-filer med nye kopier fra WordPress-repository'et, når du har bekræftet, at plugin-versionen er fri for manipulation.
 
 - Hvis du ikke kan rense sikkert, skal du gendanne fra en kendt sikkerhedskopi og anvende WAF-reglen, indtil en programrettelse er tilgængelig.
 - Overvej professionel håndtering af hændelser på store eller følsomme steder.
 
Anbefalinger til webstedsejere og værter
- Begræns bidragyderens kapacitet, hvor det er muligt. Hvis du driver et fællesskabswebsted, skal du kræve, at moderatorer gennemgår indsendt indhold.
 - Aktivér multifaktorgodkendelse for alle administratorer.
 - Brug et sikkerhedsplugin eller en firewall på værtsniveau, der understøtter virtuel patching. Virtuel patching blokerer udnyttelsesmønstre, selv når der ikke findes en officiel patch.
 - Hold revisionslogfiler og aktivitetsovervågning aktive. Detektion af mistænkelige visninger af administrator-sider efter opdateringer fra bidragydere er en vigtig detektionsstrategi.
 - Uddan redaktører og administratorer i at undgå at forhåndsvise useriøst indhold i administratorkonsoller, før indholdet er blevet renset eller gennemgået.
 
For plugin-udviklere — retningslinjer for at forhindre lignende problemer
- Behandl al brugerinput som fjendtlig, selv fra godkendte brugere.
 - Antag, at alle gemte data kan gengives i kontekster, der tillader scriptudførelse (administratorsider, frontend, REST-svar).
 - Angiv escape- og sanitiseringsmuligheder i koden; stol aldrig udelukkende på outputkontekst.
 - Dokumentér forventet input for hvert felt, og håndhæv validering ved lagring.
 - Anvend en model, der lagrer rådata og en renset/renderet variant – men sørg for, at den rensede variant er den, der bruges til præsentationen.
 - Udfør trusselsmodellering: Overvej, hvor gemte plugin-metadata senere kan gengives på administratorskærme, der er tilgængelige for privilegerede brugere.
 
Eksempel på detektionsregexer og DB-SQL-forespørgsler
Hurtige regex-eksempler (til logscanning eller SIEM):
- Find script-tag: 
(?i)(<|%3[cC])\s*script - Registrer hændelseshandlere: 
(?i)on[az]+\s*= - Find javascript: protokol: 
(?i)javascript\s*: - Registrer dobbeltkodning: 
(?i)%25[0-9a-f]{2} 
Eksempler på SQL-søgning:
-- Find metaværdier med html/script-indhold SELECT meta_id, post_id, meta_key, meta_value FROM wp_postmeta WHERE meta_value REGEXP '(?i)
Hvad med indholdssikkerhedspolitik (CSP) og browserbeskyttelse?
CSP er et effektivt forsvar i sidste linje, der reducerer virkningen af XSS. En ideel CSP tillader ikke inline-scripts og tillader kun scripts fra betroede kilder. For mange WordPress-websteder kan implementering af en streng CSP kræve refactoring. Men selv en moderat CSP, der sætter script-src 'self' og forbyder usikker-inline hæver barren for udnyttelsesevne betydeligt.
Note: CSP er ikke en erstatning for korrekt inputrensning og escape. Det supplerer server-side forsvar og virtuel WAF-patching.
Tjekliste til genopretning (hurtig)
Eksempel: Minimal aggressiv ModSecurity-regel til blokering mål parameter
Brug med forsigtighed — test for falsk positive resultater.
SecRule REQUEST_METHOD "@streq POST" "id:100200,phase:2,pass,nolog,chain"
  SecRule ARGS:target "(?i)(%3C|<)\s*(script|img|iframe|svg|object)|javascript:|on[a-z]{1,20}\s*=" "id:100201,phase:2,deny,status:403,msg:'Aggressive protection - blocked possible stored XSS in target parameter'"
Dette fjerner POST'er, der indeholder scriptlignende indhold, i målet. Hvis dit websted legitimt poster HTML i mål, brug en mindre aggressiv regel, der logger og advarer først.
Tidslinje og offentliggørelsesnoter
- Sårbarhed offentliggjort: 15. august 2025
 - CVE tildelt: CVE-2025-8720
 - Nødvendige rettigheder: Bidragyder (godkendt)
 - Officiel leverandøropdatering: Ikke tilgængelig på skrivetidspunktet — følg leverandørens opdateringskanaler, og anvend denne vejledning, indtil en opdatering udgives.
 
Endelige anbefalinger — prioriteret
- Hvis du kan fjerne plugin'et uden at påvirke funktionaliteten: Gør det med det samme.
 - Hvis fjernelse ikke er mulig: Implementer WAF-regler for at blokere 
målparameteren fra at bære scriptlignende indhold og overvåge logfiler omhyggeligt. - Revider og rens databasen for indsprøjtet indhold.
 - Kortsigtet: begræns tilmeldinger til bidragydere og begræns privilegier.
 - Midterm: patch plugin-kode ved hjælp af 
wp_kses()og streng kapacitet/noncer; langsigtet: indfør CSP og overvågning. 
Beskyt dit WordPress-websted med vores gratis beskyttelse — Start her
Vi ved, hvor forstyrrende sårbarheder som CVE-2025-8720 kan være. Hvis du ønsker essentiel, uhindret beskyttelse, mens du implementerer rettelser, så tilmeld dig WP-Firewalls Basic (gratis) plan. Den inkluderer administrerede firewallregler, en Web Application Firewall (WAF), malware-scanning, ubegrænset båndbredde og dækning af OWASP Top 10-trusler – så du kan stoppe angreb i udkanten, mens du undersøger.
Udforsk Basic-abonnementet og bliv beskyttet i dag: https://my.wp-firewall.com/buy/wp-firewall-free-plan/
Hvis du har brug for automatisk fjernelse af malware, kontrol af sortlister/hvidlister eller månedlig sikkerhedsrapportering, kan du se vores Standard- og Pro-abonnementer for udvidede funktioner.
Afsluttende bemærkninger fra WP-Firewall sikkerhedsteamet
Lagret XSS er fortsat en almindelig og farlig type sårbarhed, fordi den kombinerer persistente data med brugerkontekster, der kan være effektive (administratorbrowsere). Den bedste beskyttelse er lagdelt: fjern eller opdater sårbar software, rengør input og escape-output i kode, håndhæv minimumsrettigheder for brugere, og tilføj virtuel patching via en WAF, så du er beskyttet, mens du venter på upstream-rettelser.
Hvis du har brug for hjælp til at implementere WAF-regler, scanne dit websted for tegn på kompromittering eller anvende virtuelle patches på tværs af flere websteder, kan vores incident response team hjælpe. Vi tilbyder også automatiserede virtuelle patches for at beskytte applikationer i realtid uden at skulle vente på plugin-opdateringer.
Pas på dig selv, undersøg ofte indhold, og behandl brugerleveret indhold som fjendtligt – især på websteder med flere forfattere.
— WP-Firewall Sikkerhedsteam
					