{"id":20883,"date":"2026-06-23T00:57:30","date_gmt":"2026-06-22T21:57:30","guid":{"rendered":"https:\/\/sysadmin.courses\/%d0%be%d0%b4%d0%b8%d0%bd-get-%d0%b7%d0%b0%d0%bf%d1%80%d0%be%d1%81-%d0%b8-%d0%b2%d0%b0%d1%88%d0%b8-%d0%ba%d0%bb%d1%8e%d1%87%d0%b8-%d0%be%d1%82-%d0%bf%d0%be%d1%87%d1%82%d1%8b-%d1%83%d1%82\/"},"modified":"2026-06-23T01:02:16","modified_gmt":"2026-06-22T22:02:16","slug":"vienas-get-uzklausa-ir-jusu-pasto-raktai-nutekejo-cve-2026-4020-gravity-smtp","status":"publish","type":"post","link":"https:\/\/sysadmin.courses\/lt\/vienas-get-uzklausa-ir-jusu-pasto-raktai-nutekejo-cve-2026-4020-gravity-smtp\/","title":{"rendered":"Vienas GET u\u017eklausa \u2014 ir j\u016bs\u0173 pa\u0161to raktai nutek\u0117jo: CVE-2026-4020 Gravity SMTP"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u012edieg\u0117te WordPress SMTP papildin\u012f, prijung\u0117te SendGrid arba Amazon SES, patikrinote kad lai\u0161kai i\u0161siun\u010diami \u2014 ir pamir\u0161ote. Papildinys veikia, viskas gerai. Tuo tarpu bet kas internete, net netur\u0117damas paskyros j\u016bs\u0173 svetain\u0117je, i\u0161siun\u010dia vien\u0105 HTTP GET u\u017eklaus\u0105 ir gauna 365 KB JSON su j\u016bs\u0173 API raktais, OAuth tokenais, DKIM konfig\u016bracija, vis\u0173 \u012fdiegt\u0173 papildini\u0173 s\u0105ra\u0161u su versij\u0173 numeriais ir duomen\u0173 baz\u0117s strukt\u016bra. Be prisijungimo. Be brute force. Be jokio i\u0161naudojimo. Tiesiog u\u017eklausa \u012f atvir\u0105 endpoint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">B\u016btent tai ir vyksta svetain\u0117se, kuriose \u012fdiegtas Gravity SMTP versija 2.1.4 ir \u017eemesn\u0117. Pa\u017eeid\u017eiamumas u\u017eregistruotas kaip CVE-2026-4020, CVSS 7.5 (High), CWE-200 \u2014 Exposure of Sensitive Information to an Unauthorized Actor. U\u017e \u0161io \u012fvertinimo slypi pilnas j\u016bs\u0173 pa\u0161to tarnybos credentials i\u0161traukimas, paruo\u0161tas naudoti be jokio papildomo pasiruo\u0161imo. Wordfence jau u\u017eblokavo daugiau nei 17 milijon\u0173 i\u0161naudojimo bandym\u0173.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAS YRA GRAVITY SMTP<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gravity SMTP \u2014 komercinis WordPress papildinys i\u0161 bendrov\u0117s RocketGenius, tos pa\u010dios komandos, kuri suk\u016br\u0117 Gravity Forms. Papildinys sprend\u017eia tipin\u0119 problem\u0105: WordPress pagal nutyl\u0117jim\u0105 siun\u010dia lai\u0161kus per PHP funkcij\u0105 <code>mail()<\/code>, kuri neveikia daugumoje hosting aplink\u0173 \u2014 lai\u0161kai arba visai nepasiekia gav\u0117jo, arba patenka \u012f \u0161lam\u0161t\u0105, nes serveris n\u0117ra \u012fgaliotas si\u0173sti vardu domeno. Gravity SMTP pakei\u010dia \u0161\u012f sugedus\u012f mechanizm\u0105 jungtimi su profesionalia pa\u0161to tarnyba \u2014 SendGrid, Mailgun, Amazon SES, Google Workspace, Brevo, Postmark, Resend, Zoho ir kitomis. Papildinys \u012fdiegtas ma\u017edaug 100 000 svetaini\u0173.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">B\u016btent tai ir daro j\u012f patrauklia taikiniu. SMTP papildinys i\u0161 esm\u0117s yra rakt\u0173 saugykla. Jis \u017eino visk\u0105, ko reikia si\u0173sti lai\u0161kus j\u016bs\u0173 domeno vardu: API raktus, OAuth tokenus, SMTP prisijungimo duomenis ir slapta\u017eod\u017eius, DKIM konfig\u016bracij\u0105. Be \u0161i\u0173 duomen\u0173 papildinys negali veikti, tod\u0117l jie saugomi tiesiai WordPress \u2014 duomen\u0173 baz\u0117je ir papildinio konfig\u016bracijoje. Tai normali architekt\u016bra, taip veikia visi SMTP papildiniai.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP VEIKIA PA\u017dEID\u017dIAMUMAS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kai WordPress papildinys registruoja REST API endpoint, jis privalo nurodyti <code>permission_callback<\/code> \u2014 sargybinio funkcij\u0105, kuri nusprend\u017eia: praleisti \u0161i\u0105 u\u017eklaus\u0105 ar atmesti. Gr\u0105\u017eino <code>true<\/code> \u2014 praeik. Gr\u0105\u017eino <code>false<\/code> \u2014 gauk 401. Visa prieigos kontrol\u0117s sistema laikosi ant \u0161ios vienos funkcijos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gravity SMTP ka\u017ekas para\u0161\u0117 sargybin\u012f, kuris praleid\u017eia visus. Be i\u0161im\u010di\u0173. Endpoint <code>\/wp-json\/gravitysmtp\/v1\/tests\/mock-data<\/code> u\u017eregistruotas su <code>permission_callback<\/code>, kuris bes\u0105lygi\u0161kai gr\u0105\u017eina <code>true<\/code> \u2014 jokio sesijos tikrinimo, jokio vaidmens tikrinimo, jokio nonce, nieko. Prid\u0117kite u\u017eklausai parametr\u0105 <code>?page=gravitysmtp-settings<\/code> ir papildinys paklusniai i\u0161kvie\u010dia vidin\u012f metod\u0105 <code>register_connector_data()<\/code>, surenka piln\u0105 System Report ir gr\u0105\u017eina j\u012f atsakyme. Visa sistemos informacija atsiduria u\u017epuoliko rankose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I\u0161naudojimas atrodo taip: viena <code>curl<\/code> komanda, jokie special\u016bs \u012frankiai, be joki\u0173 i\u0161ankstini\u0173 \u017eini\u0173 apie taikin\u012f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl \"https:\/\/example.com\/wp-json\/gravitysmtp\/v1\/tests\/mock-data?page=gravitysmtp-settings\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Atsakyme gaunamas ~365 KB JSON, kuriame yra API raktai ir OAuth tokenai visiems sukonfig\u016bruotiems pa\u0161to integravimams, SMTP prisijungimo duomenys ir slapta\u017eod\u017eiai, DKIM tokenai, PHP versija, web serverio versija, pilnas \u012fdiegt\u0173 papildini\u0173 s\u0105ra\u0161as su versijomis, aktyvi tema, duomen\u0173 baz\u0117s lenteli\u0173 pavadinimai ir MariaDB\/MySQL versija.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Paveiktos visos Gravity SMTP versijos iki 2.1.4 imtinai. Pataisymas i\u0161leistas versijoje 2.1.5 \u2014 2026 m. kovo 17 d., dar prie\u0161 vie\u0161\u0105 atskleidim\u0105. Pataisymas prid\u0117jo tinkam\u0105 prieigos kontrol\u0117s patikrinim\u0105 <code>permission_callback<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CHRONOLOGIJA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RocketGenius i\u0161tais\u0117 pa\u017eeid\u017eiamum\u0105 2026 m. kovo m\u0117nes\u012f \u2014 tyliai, viena kodo eilute, be jokio pamin\u0117jimo changelog ir be n\u0117 vieno lai\u0161ko vartotojams. Logika suprantama: nesukurti d\u0117mesio kol dauguma neatnaujins. Ta\u010diau mokamiems papildiniams automatiniai atnaujinimai da\u017enai i\u0161jungti \u2014 administratoriai bijo, kad atnaujinimas sugadins produkcin\u0119 aplink\u0105. D\u0117l to t\u016bkstan\u010diai svetaini\u0173 taip ir liko su 2.1.4, net ne\u017einodamos, kad pataisymas jau egzistuoja.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gegu\u017e\u0117s prad\u017eioje r\/WordPress administratoriai prad\u0117jo sk\u0173stis keistais dalykais: SendGrid paskyros u\u017eblokuotos u\u017e \u0161lam\u0161to siuntim\u0105, Mailgun s\u0105skaitos per nakt\u012f i\u0161augo tris kartus, kai kuriems tiek\u0117jai patys rotavo raktus su pastaba \u201e\u012ftartina veikla&#8221;. CrowdSec u\u017efiksavo pirm\u0105 real\u0173 i\u0161naudojim\u0105 gegu\u017e\u0117s 27 d., o iki bir\u017eelio 1 d. sraut\u0105 klasifikavo kaip \u201efonin\u012f triuk\u0161m\u0105&#8221; \u2014 tai rei\u0161kia, kad pa\u017eeid\u017eiamumas jau buvo \u012ftrauktas \u012f automatizuotus skenerius, kurie nuolatos perima WordPress svetaines be \u017emogaus dalyvavimo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2026 m. bir\u017eelio 19 d. pasirod\u0117 oficialus advisory. T\u0105 dien\u0105 blokuot\u0173 bandym\u0173 skaitliukas per\u017eeng\u0117 17 milijon\u0173 rib\u0105. Pikas \u2014 bir\u017eelio 7 d., daugiau nei 4 milijonai u\u017eklaus\u0173 per vien\u0105 par\u0105. Trys m\u0117nesiai tarp pataisymo ir vie\u0161o atskleidimo pasirod\u0117 es\u0105 ne apsauga, o laiko prana\u0161umas tiems, kas rado klaid\u0105 anks\u010diau nei Wordfence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KOD\u0116L TAI SVARBU<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dvi svetain\u0117s neteko savo SendGrid paskyr\u0173. Abi naudojo Gravity SMTP, abi tur\u0117jo mokamas SendGrid planus transakciniam pa\u0161tui. Per 36 valandas nuo to, kai j\u0173 endpoint atidav\u0117 credentials skaneriu, SendGrid u\u017eblokavo abi paskyras d\u0117l \u0161lam\u0161to siuntimo. Atk\u016brimas u\u017etruko a\u0161tuonias dienas ir reikalavo ra\u0161ti\u0161ko incidento ataskaitos. A\u0161tuonios dienos be transakcinio pa\u0161to \u2014 be u\u017esakym\u0173 patvirtinim\u0173, be slapta\u017eod\u017ei\u0173 keitimo lai\u0161k\u0173, be prane\u0161im\u0173. Internetinei parduotuvei tai ne \u201esaugumo incidentas&#8221;, tai operacinis \u017elugimas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CVSS 7.5 \u2014 tai High, ir \u012fvertinimas u\u017etarnaitas: ataka nereikalauja nieko, nulis i\u0161ankstini\u0173 s\u0105lyg\u0173, nulis privilegij\u0173, viena u\u017eklausa. Ta\u010diau tai, k\u0105 u\u017epuolikas gauna atsakyme \u2014 tai ne tik abstrakti \u201einformacijos nutek\u0117jimas&#8221;, o paruo\u0161tas \u012franki\u0173 rinkinys keliems nepriklausomiems atakos vektoriams vienu metu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pa\u017eeistas SendGrid arba Mailgun API raktas suteikia u\u017epuolikui galimyb\u0119 si\u0173sti lai\u0161kus j\u016bs\u0173 domeno vardu. Ne suklastotus \u2014 tikrus, per j\u016bs\u0173 paskyr\u0105, su j\u016bs\u0173 credentials. Tokie lai\u0161kai praeina SPF patikrinim\u0105, nes siun\u010diami per \u012fgaliot\u0105 tarnyb\u0105. Jie praeina DKIM patikrinim\u0105, nes pasira\u0161yti j\u016bs\u0173 raktu. Bet kokio \u0161lam\u0161to filtro ir gav\u0117jo po\u017ei\u016briu \u2014 tai teis\u0117tas pa\u0161tas i\u0161 j\u016bs\u0173 domeno. B\u016btent toki\u0105 infrastrukt\u016br\u0105 phishing grup\u0117s nuomojasi u\u017e didelius pinigus. \u010cia ji gaunama nemokamai, viena curl u\u017eklausa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tuo pa\u010diu metu u\u017epuolikas gauna piln\u0105 j\u016bs\u0173 svetain\u0117s \u017eem\u0117lap\u012f. \u012ediegt\u0173 papildini\u0173 s\u0105ra\u0161as su tiksliais versij\u0173 numeriais \u2014 tai pagrindas pasirinkti kit\u0105 atakos vektori\u0173. Yra pasen\u0119s papildinys su \u017einomu CVE? U\u017epuolikas j\u012f mato i\u0161 karto. PHP versija, MariaDB versija, duomen\u0173 baz\u0117s lenteli\u0173 pavadinimai \u2014 visa tai suma\u017eina slenkst\u012f v\u0117lesniam bet kokio kito pa\u017eeid\u017eiamumo i\u0161naudojimui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DKIM nusipelno atskiro pamin\u0117jimo. Dauguma administratori\u0173 po incidento at\u0161aukia API raktus \u2014 ir mano, kad viskas tvarkoje. Ta\u010diau jei DKIM tokenai pateko \u012f i\u0161trauk\u0105, vien API rakt\u0173 keitimas problemos visi\u0161kai neu\u017esandarina. DKIM raktas susietas su j\u016bs\u0173 domeno DNS \u012fra\u0161u, o ne su paskyra pa\u0161to tarnyboje. Jei u\u017epuolikas susp\u0117jo nukopijuoti privat\u0173 DKIM rakt\u0105, jis techni\u0161kai gali toliau pasira\u0161in\u0117ti lai\u0161kus j\u016bs\u0173 domeno para\u0161u \u2014 net po to, kai at\u0161auk\u0117te visus API raktus. Sprendimas \u2014 DKIM selector rotacija: sukurti nauj\u0105 DNS \u012fra\u0161\u0105 su nauju raktu, o sen\u0105 selector deaktyvuoti pas tiek\u0117j\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>K\u0104 DARYTI<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pirmiausia patikrinkite ar papildinys \u012fdiegtas ir kokia versija naudojama. WordPress administravimo skydelyje tai matoma skiltyje Plugins \u2192 Installed Plugins. Per WP-CLI patikrinimas u\u017etrunka sekund\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wp plugin get gravity-smtp --field=version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei versija 2.1.4 arba \u017eemesn\u0117 \u2014 atnaujinkite nedelsiant:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wp plugin update gravity-smtp<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po atnaujinimo patikrinkite, kad pataisymas veikia. U\u017eklausa \u012f endpoint dabar tur\u0117t\u0173 gr\u0105\u017einti 401 arba 403, o ne JSON su duomenimis:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -o \/dev\/null -s -w \"%{http_code}\" \\\n  \"https:\/\/example.com\/wp-json\/gravitysmtp\/v1\/tests\/mock-data?page=gravitysmtp-settings\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei svetain\u0117 veik\u0117 su pa\u017eeid\u017eiama versija \u2014 laikykite visus credentials pa\u017eeistais ir rotuokite juos nepriklausomai nuo to, ar loguose radote atakos p\u0117dsak\u0173. U\u017epuolikai WordPress nepalieka joki\u0173 p\u0117dsak\u0173 \u2014 jie tiesiog siun\u010dia GET u\u017eklaus\u0105 \u012f atvir\u0105 endpoint ir gauna, ko nor\u0117jo. P\u0117dsakai yra tik web serverio prieigos log\u0173 failuose. Patikrinkite juos d\u0117l u\u017eklaus\u0173 \u012f pa\u017eeid\u017eiam\u0105 endpoint per pastar\u0105sias savaites \u2014 aktyvus skenavimas prasid\u0117jo gegu\u017e\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>grep \"gravitysmtp\/v1\/tests\/mock-data\" \/var\/log\/nginx\/access.log\n# arba Apache atveju:\ngrep \"gravitysmtp\/v1\/tests\/mock-data\" \/var\/log\/apache2\/access.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei \u012fra\u0161\u0173 yra \u2014 svetain\u0117 beveik tikrai buvo nuskenuota. Pirmojo \u012fra\u0161o data log\u0173 faile parodys nuo kurio momento laikyti credentials pa\u017eeistais. Rotuokite visus API raktus pa\u0161to integravimams atitinkam\u0173 tarnyb\u0173 nustatymuose: SendGrid, Mailgun, Amazon SES, Google OAuth, Brevo \u2014 visk\u0105, kas buvo prijungta Gravity SMTP. Jei naudotas DKIM \u2014 sukurkite nauj\u0105 selector pas tiek\u0117j\u0105, atnaujinkite DNS TXT \u012fra\u0161\u0105, sen\u0105 selector deaktyvuokite. Tai svarbu: API rakto keitimas be DKIM selector keitimo palieka u\u017epuolikui galimyb\u0119 pasira\u0161in\u0117ti lai\u0161kus j\u016bs\u0173 domeno vardu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tuo pat metu \u012fjunkite automatinius atnaujinimus. WordPress gali automati\u0161kai atnaujinti papildinius, ta\u010diau mokamiems papildiniams tai da\u017enai i\u0161jungta \u2014 administratoriai bijo, kad atnaujinimas sugadins j\u0173 pritaikymus. Baim\u0117 suprantama, ta\u010diau kaina \u2014 kaip tik tokios situacijos, kai pataisymas guli tris m\u0117nesius, o svetain\u0117 lieka pa\u017eeid\u017eiama. \u012ejunkite automatinius atnaujinimus per WP-CLI:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wp plugin auto-updates enable gravity-smtp<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Arba visiems papildiniams i\u0161 karto \u2014 kad nereik\u0117t\u0173 rankiniu b\u016bdu spr\u0119sti kuris svarbus, o kuris ne:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wp plugin auto-updates enable --all<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei atnaujinimas \u0161iuo metu ne\u012fmanomas \u2014 pavyzd\u017eiui, svetain\u0119 tvarko tre\u010dioji \u0161alis ir reikia suderinimo \u2014 blokuokite endpoint nginx konfig\u016bracijos lygmeniu kaip laikin\u0105 priemon\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>location ~* \/wp-json\/gravitysmtp\/ {\n    deny all;\n    return 403;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I\u0160VADOS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CVE-2026-4020 \u2014 vadov\u0117linis CWE-200 pavyzdys: viena kodo eilut\u0117 <code>permission_callback<\/code> paver\u010dia SMTP papildin\u012f vie\u0161a credentials s\u0105vartynu. CVSS 7.5 (High), aktyvus i\u0161naudojimas, 17 milijon\u0173 blokuot\u0173 bandym\u0173 \u2014 ir visa tai d\u0117l pa\u017eeid\u017eiamumo, kur\u012f nereikia \u201ei\u0161naudoti&#8221; \u012fprasta prasme. Prieiga prie SMTP paskyros su gera domeno siuntimo reputacija juodojoje rinkoje kainuoja daugiau nei daugelis RCE i\u0161naudojim\u0173.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jei Gravity SMTP \u012fdiegtas \u2014 atnaujinkite iki 2.1.5, patikrinkite logus, rotuokite credentials ir DKIM. Jei ne\u012fdiegtas \u2014 \u012fsitikinkite, kad j\u016bs\u0173 SMTP papildinys neregistruoja vie\u0161\u0173 endpoint\u0173 su jautriais duomenimis. Tai taikoma bet kokiam papildiniui, kuris saugo API raktus: nuo SMTP integravim\u0173 iki mok\u0117jimo tiek\u0117j\u0173 ir CRM sistem\u0173. WordPress REST API \u2014 patogus \u012frankis, ta\u010diau kiekvienas neapsaugotas endpoint yra potenciali nutek\u0117jimo vieta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pataisymas pasirod\u0117 kovo m\u0117nes\u012f. Svetain\u0117s lau\u017eomos bir\u017eel\u012f. Trys m\u0117nesiai skirtumo \u2014 tai ne k\u016br\u0117jo kalt\u0117, jis klaid\u0105 i\u0161tais\u0117. Tai tyli pataisymo be prane\u0161im\u0173 ir i\u0161jungt\u0173 automatini\u0173 atnaujinim\u0173 kaina. Kit\u0105 kart\u0105 tai bus kitas papildinys, kitas endpoint, tos pa\u010dios pasekm\u0117s. Pad\u0117t\u012f kei\u010dia tik vienas dalykas \u2014 automatiniai atnaujinimai \u012fjungti, arba j\u016bs patys sekate saugumo leidimus papildini\u0173, kurie saugo j\u016bs\u0173 raktus.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u012edieg\u0117te WordPress SMTP papildin\u012f, prijung\u0117te SendGrid arba Amazon SES, patikrinote kad lai\u0161kai i\u0161siun\u010diami \u2014 ir pamir\u0161ote. Papildinys veikia, viskas gerai. Tuo tarpu bet kas internete, net netur\u0117damas paskyros j\u016bs\u0173 svetain\u0117je, i\u0161siun\u010dia vien\u0105 HTTP GET u\u017eklaus\u0105 ir gauna 365 KB JSON su j\u016bs\u0173 API raktais, OAuth tokenais, DKIM konfig\u016bracija, vis\u0173 \u012fdiegt\u0173 papildini\u0173 s\u0105ra\u0161u su versij\u0173 numeriais ir duomen\u0173 baz\u0117s strukt\u016bra. Be prisijungimo. Be brute force. Be jokio i\u0161naudojimo. Tiesiog u\u017eklausa \u012f atvir\u0105 endpoint. B\u016btent tai ir vyksta svetain\u0117se, kuriose \u012fdiegtas Gravity SMTP versija 2.1.4 ir \u017eemesn\u0117. Pa\u017eeid\u017eiamumas u\u017eregistruotas kaip CVE-2026-4020, CVSS 7.5 (High), CWE-200 \u2014 Exposure of Sensitive Information to an Unauthorized Actor. U\u017e \u0161io \u012fvertinimo slypi pilnas j\u016bs\u0173 pa\u0161to tarnybos credentials i\u0161traukimas, paruo\u0161tas naudoti be jokio papildomo pasiruo\u0161imo. Wordfence jau u\u017eblokavo daugiau nei 17 milijon\u0173 i\u0161naudojimo bandym\u0173. KAS YRA GRAVITY SMTP Gravity SMTP \u2014 komercinis WordPress papildinys i\u0161 bendrov\u0117s RocketGenius, tos pa\u010dios komandos, kuri suk\u016br\u0117 Gravity Forms. Papildinys sprend\u017eia tipin\u0119 problem\u0105: WordPress pagal nutyl\u0117jim\u0105 siun\u010dia lai\u0161kus per PHP funkcij\u0105 mail(), kuri neveikia daugumoje hosting aplink\u0173 \u2014 lai\u0161kai arba visai nepasiekia gav\u0117jo, arba patenka \u012f \u0161lam\u0161t\u0105, nes serveris n\u0117ra \u012fgaliotas si\u0173sti vardu domeno. Gravity SMTP pakei\u010dia \u0161\u012f sugedus\u012f mechanizm\u0105 jungtimi su profesionalia pa\u0161to tarnyba \u2014 SendGrid, Mailgun, Amazon SES, Google Workspace, Brevo, Postmark, Resend, Zoho ir kitomis. Papildinys \u012fdiegtas ma\u017edaug 100 000 svetaini\u0173. B\u016btent tai ir daro j\u012f patrauklia taikiniu. SMTP papildinys i\u0161 esm\u0117s yra rakt\u0173 saugykla. Jis \u017eino visk\u0105, ko reikia si\u0173sti lai\u0161kus j\u016bs\u0173 domeno vardu: API raktus, OAuth tokenus, SMTP prisijungimo duomenis ir slapta\u017eod\u017eius, DKIM konfig\u016bracij\u0105. Be \u0161i\u0173 duomen\u0173 papildinys negali veikti, tod\u0117l jie saugomi tiesiai WordPress \u2014 duomen\u0173 baz\u0117je ir papildinio konfig\u016bracijoje. Tai normali architekt\u016bra, taip veikia visi SMTP papildiniai. KAIP VEIKIA PA\u017dEID\u017dIAMUMAS Kai WordPress papildinys registruoja REST API endpoint, jis privalo nurodyti permission_callback \u2014 sargybinio funkcij\u0105, kuri nusprend\u017eia: praleisti \u0161i\u0105 u\u017eklaus\u0105 ar atmesti. Gr\u0105\u017eino true \u2014 praeik. Gr\u0105\u017eino false \u2014 gauk 401. Visa prieigos kontrol\u0117s sistema laikosi ant \u0161ios vienos funkcijos. Gravity SMTP ka\u017ekas para\u0161\u0117 sargybin\u012f, kuris praleid\u017eia visus. Be i\u0161im\u010di\u0173. Endpoint \/wp-json\/gravitysmtp\/v1\/tests\/mock-data u\u017eregistruotas su permission_callback, kuris bes\u0105lygi\u0161kai gr\u0105\u017eina true \u2014 jokio sesijos tikrinimo, jokio vaidmens tikrinimo, jokio nonce, nieko. Prid\u0117kite u\u017eklausai parametr\u0105 ?page=gravitysmtp-settings ir papildinys paklusniai i\u0161kvie\u010dia vidin\u012f metod\u0105 register_connector_data(), surenka piln\u0105 System Report ir gr\u0105\u017eina j\u012f atsakyme. Visa sistemos informacija atsiduria u\u017epuoliko rankose. I\u0161naudojimas atrodo taip: viena curl komanda, jokie special\u016bs \u012frankiai, be joki\u0173 i\u0161ankstini\u0173 \u017eini\u0173 apie taikin\u012f: Atsakyme gaunamas ~365 KB JSON, kuriame yra API raktai ir OAuth tokenai visiems sukonfig\u016bruotiems pa\u0161to integravimams, SMTP prisijungimo duomenys ir slapta\u017eod\u017eiai, DKIM tokenai, PHP versija, web serverio versija, pilnas \u012fdiegt\u0173 papildini\u0173 s\u0105ra\u0161as su versijomis, aktyvi tema, duomen\u0173 baz\u0117s lenteli\u0173 pavadinimai ir MariaDB\/MySQL versija. Paveiktos visos Gravity SMTP versijos iki 2.1.4 imtinai. Pataisymas i\u0161leistas versijoje 2.1.5 \u2014 2026 m. kovo 17 d., dar prie\u0161 vie\u0161\u0105 atskleidim\u0105. Pataisymas prid\u0117jo tinkam\u0105 prieigos kontrol\u0117s patikrinim\u0105 permission_callback. CHRONOLOGIJA RocketGenius i\u0161tais\u0117 pa\u017eeid\u017eiamum\u0105 2026 m. kovo m\u0117nes\u012f \u2014 tyliai, viena kodo eilute, be jokio pamin\u0117jimo changelog ir be n\u0117 vieno lai\u0161ko vartotojams. Logika suprantama: nesukurti d\u0117mesio kol dauguma neatnaujins. Ta\u010diau mokamiems papildiniams automatiniai atnaujinimai da\u017enai i\u0161jungti \u2014 administratoriai bijo, kad atnaujinimas sugadins produkcin\u0119 aplink\u0105. D\u0117l to t\u016bkstan\u010diai svetaini\u0173 taip ir liko su 2.1.4, net ne\u017einodamos, kad pataisymas jau egzistuoja. Gegu\u017e\u0117s prad\u017eioje r\/WordPress administratoriai prad\u0117jo sk\u0173stis keistais dalykais: SendGrid paskyros u\u017eblokuotos u\u017e \u0161lam\u0161to siuntim\u0105, Mailgun s\u0105skaitos per nakt\u012f i\u0161augo tris kartus, kai kuriems tiek\u0117jai patys rotavo raktus su pastaba \u201e\u012ftartina veikla&#8221;. CrowdSec u\u017efiksavo pirm\u0105 real\u0173 i\u0161naudojim\u0105 gegu\u017e\u0117s 27 d., o iki bir\u017eelio 1 d. sraut\u0105 klasifikavo kaip \u201efonin\u012f triuk\u0161m\u0105&#8221; \u2014 tai rei\u0161kia, kad pa\u017eeid\u017eiamumas jau buvo \u012ftrauktas \u012f automatizuotus skenerius, kurie nuolatos perima WordPress svetaines be \u017emogaus dalyvavimo. 2026 m. bir\u017eelio 19 d. pasirod\u0117 oficialus advisory. T\u0105 dien\u0105 blokuot\u0173 bandym\u0173 skaitliukas per\u017eeng\u0117 17 milijon\u0173 rib\u0105. Pikas \u2014 bir\u017eelio 7 d., daugiau nei 4 milijonai u\u017eklaus\u0173 per vien\u0105 par\u0105. Trys m\u0117nesiai tarp pataisymo ir vie\u0161o atskleidimo pasirod\u0117 es\u0105 ne apsauga, o laiko prana\u0161umas tiems, kas rado klaid\u0105 anks\u010diau nei Wordfence. KOD\u0116L TAI SVARBU Dvi svetain\u0117s neteko savo SendGrid paskyr\u0173. Abi naudojo Gravity SMTP, abi tur\u0117jo mokamas SendGrid planus transakciniam pa\u0161tui. Per 36 valandas nuo to, kai j\u0173 endpoint atidav\u0117 credentials skaneriu, SendGrid u\u017eblokavo abi paskyras d\u0117l \u0161lam\u0161to siuntimo. Atk\u016brimas u\u017etruko a\u0161tuonias dienas ir reikalavo ra\u0161ti\u0161ko incidento ataskaitos. A\u0161tuonios dienos be transakcinio pa\u0161to \u2014 be u\u017esakym\u0173 patvirtinim\u0173, be slapta\u017eod\u017ei\u0173 keitimo lai\u0161k\u0173, be prane\u0161im\u0173. Internetinei parduotuvei tai ne \u201esaugumo incidentas&#8221;, tai operacinis \u017elugimas. CVSS 7.5 \u2014 tai High, ir \u012fvertinimas u\u017etarnaitas: ataka nereikalauja nieko, nulis i\u0161ankstini\u0173 s\u0105lyg\u0173, nulis privilegij\u0173, viena u\u017eklausa. Ta\u010diau tai, k\u0105 u\u017epuolikas gauna atsakyme \u2014 tai ne tik abstrakti \u201einformacijos nutek\u0117jimas&#8221;, o paruo\u0161tas \u012franki\u0173 rinkinys keliems nepriklausomiems atakos vektoriams vienu metu. Pa\u017eeistas SendGrid arba Mailgun API raktas suteikia u\u017epuolikui galimyb\u0119 si\u0173sti lai\u0161kus j\u016bs\u0173 domeno vardu. Ne suklastotus \u2014 tikrus, per j\u016bs\u0173 paskyr\u0105, su j\u016bs\u0173 credentials. Tokie lai\u0161kai praeina SPF patikrinim\u0105, nes siun\u010diami per \u012fgaliot\u0105 tarnyb\u0105. Jie praeina DKIM patikrinim\u0105, nes pasira\u0161yti j\u016bs\u0173 raktu. Bet kokio \u0161lam\u0161to filtro ir gav\u0117jo po\u017ei\u016briu \u2014 tai teis\u0117tas pa\u0161tas i\u0161 j\u016bs\u0173 domeno. B\u016btent toki\u0105 infrastrukt\u016br\u0105 phishing grup\u0117s nuomojasi u\u017e didelius pinigus. \u010cia ji gaunama nemokamai, viena curl u\u017eklausa. Tuo pa\u010diu metu u\u017epuolikas gauna piln\u0105 j\u016bs\u0173 svetain\u0117s \u017eem\u0117lap\u012f. \u012ediegt\u0173 papildini\u0173 s\u0105ra\u0161as su tiksliais versij\u0173 numeriais \u2014 tai pagrindas pasirinkti kit\u0105 atakos vektori\u0173. Yra pasen\u0119s papildinys su \u017einomu CVE? U\u017epuolikas j\u012f mato i\u0161 karto. PHP versija, MariaDB versija, duomen\u0173 baz\u0117s lenteli\u0173 pavadinimai \u2014 visa tai suma\u017eina slenkst\u012f v\u0117lesniam bet kokio kito pa\u017eeid\u017eiamumo i\u0161naudojimui. DKIM nusipelno atskiro pamin\u0117jimo. Dauguma administratori\u0173 po incidento at\u0161aukia API raktus \u2014 ir mano, kad viskas tvarkoje. Ta\u010diau jei DKIM tokenai pateko \u012f i\u0161trauk\u0105, vien API rakt\u0173 keitimas problemos visi\u0161kai neu\u017esandarina. DKIM raktas susietas su j\u016bs\u0173 domeno DNS \u012fra\u0161u, o ne su paskyra pa\u0161to tarnyboje. Jei u\u017epuolikas susp\u0117jo nukopijuoti privat\u0173 DKIM rakt\u0105, jis techni\u0161kai gali toliau pasira\u0161in\u0117ti lai\u0161kus j\u016bs\u0173 domeno para\u0161u \u2014 net po to, kai at\u0161auk\u0117te visus API raktus. Sprendimas \u2014 DKIM selector rotacija: sukurti nauj\u0105 DNS \u012fra\u0161\u0105 su nauju raktu, o sen\u0105 selector deaktyvuoti pas tiek\u0117j\u0105. K\u0104 DARYTI Pirmiausia patikrinkite ar papildinys \u012fdiegtas ir kokia versija naudojama. WordPress administravimo skydelyje tai matoma skiltyje Plugins \u2192 Installed Plugins. Per WP-CLI patikrinimas u\u017etrunka sekund\u0119: Jei versija 2.1.4 arba \u017eemesn\u0117 \u2014 atnaujinkite nedelsiant: Po atnaujinimo patikrinkite, kad pataisymas veikia. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20879,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[275,202,186,155,151],"tags":[722,734,723,724,725,726,735,727,728,729,596,362,730,597],"class_list":["post-20883","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apache-lt","category-cve-lt","category-nginx-lt","category-saugumas","category-wordpress","tag-api-keys","tag-auto-updates","tag-cve-2026-4020","tag-dkim","tag-gravity-smtp","tag-information-disclosure","tag-plugin-security","tag-rest-api","tag-sendgrid","tag-smtp-plugin","tag-wordfence","tag-wordpress","tag-wordpress-security","tag-wp-cli"],"_links":{"self":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/comments?post=20883"}],"version-history":[{"count":3,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20883\/revisions"}],"predecessor-version":[{"id":20889,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20883\/revisions\/20889"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media\/20879"}],"wp:attachment":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media?parent=20883"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/categories?post=20883"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/tags?post=20883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}