{"id":20229,"date":"2026-06-05T16:58:15","date_gmt":"2026-06-05T13:58:15","guid":{"rendered":"https:\/\/sysadmin.courses\/darkreplica-cve-2026-23631-%d0%ba%d0%b0%d0%ba-redis-%d0%be%d1%82%d0%b4%d0%b0%d0%bb-rce-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%bc%d0%b5%d1%85%d0%b0%d0%bd%d0%b8%d0%b7%d0%bc-%d1%80%d0%b5%d0%bf%d0%bb%d0%b8\/"},"modified":"2026-06-05T17:02:03","modified_gmt":"2026-06-05T14:02:03","slug":"darkreplica-cve-2026-23631-kaip-redis-atidave-rce-per-replikacijos-mechanizma","status":"publish","type":"post","link":"https:\/\/sysadmin.courses\/lt\/darkreplica-cve-2026-23631-kaip-redis-atidave-rce-per-replikacijos-mechanizma\/","title":{"rendered":"DarkReplica (CVE-2026-23631): kaip Redis atidav\u0117 RCE per replikacijos mechanizm\u0105"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Redis veikia u\u017e pus\u0117s \u0161iuolaikinio interneto \u2014 sesij\u0173 talpykla, u\u017eduo\u010di\u0173 eil\u0117s, grei\u010dio ribojimas, pub\/sub. B\u016btent d\u0117l to pa\u017eeid\u017eiamumas jame retai lieka tik teorinis. CVE-2026-23631, pavadintas DarkReplica, yra use-after-free klaida replikacijos posistem\u0117je, kuri tam tikromis s\u0105lygomis atveria keli\u0105 \u012f savavali\u0161ko kodo vykdym\u0105 serveryje. Tyr\u0117jas Yoni Sherez j\u0105 rado ZeroDay.Cloud 2025 var\u017eybose Londone pra\u0117jusi\u0173 met\u0173 gruod\u012f ir gavo $30 000. Pataisymas i\u0161leistas 2026 m. gegu\u017e\u0117s 5 d. Jei dar neatnaujinote \u2014 skaitykite toliau.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAS NUTIKO<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CVE-2026-23631 \u2014 use-after-free pa\u017eeid\u017eiamumas Redis replikacijos mechanizme. CVSS 6.1 (Medium pagal CVSSv4.0), CWE-416. Oficialus Redis apra\u0161ymas: autentifikuotas vartotojas gali i\u0161naudoti master-replica sinchronizacijos mechanizm\u0105 ir sukelti use-after-free Lua funkcij\u0173 variklyje, o tai gali lemti nuotolin\u012f kodo vykdym\u0105. Pa\u017eeid\u017eiamumas paveikia visas Redis versijas su Lua scripting palaikymu \u2014 tai prakti\u0161kai visos realiai naudojamos versijos. Vienintelis apribojimas: reikalinga autentifikacija Redis serveryje. Koncepcijos \u012frodymas paskelbtas tyr\u0117jo writeup.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Svarbi pastaba d\u0117l CVSS: kai kurie \u0161altiniai nurodo 8.5 High \u2014 tai senesnis CVSS v2 balas i\u0161 antrinio \u0161altinio. Oficialus Redis ir NVD \u012fvertinimas pagal CVSSv4.0 yra 6.1 Medium, su auk\u0161tu atakos sud\u0117tingumu (AC:H). Tai nerei\u0161kia, kad pa\u017eeid\u017eiamumas nepavojingas. Tai rei\u0161kia, kad s\u0117kmingai i\u0161naudoti j\u012f reikia keli\u0173 s\u0105lyg\u0173 sutapimo \u2014 ta\u010diau Yoni Sherez parod\u0117, kad tai \u012fmanoma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAS YRA REDIS REPLIKACIJA IR LUA VARIKLIS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Redis palaiko master-replica replikacij\u0105: vienas serveris skiriamas pagrindiniu, kiti \u2014 replikomis. Replika prisijungia prie master serverio, gauna piln\u0105 sinchronizacij\u0105 paleid\u017eiant, o tada priima nuolatin\u0119 komand\u0173 sraut\u0105 realiuoju laiku. Komanda <code>SLAVEOF<\/code> naudojama master serveriui priskirti. Tai standartinis mechanizmas auk\u0161tam pasiekiamumui ir skaitymo masteliavimui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Redis taip pat turi integruot\u0105 Lua varikl\u012f \u2014 tiksliau, du. Pirmasis yra scripting engine (<code>EVAL<\/code>, <code>EVALSHA<\/code>, <code>SCRIPT LOAD<\/code>) \u2014 senesnis modelis savavali\u0161kiems Lua skriptams vykdyti. Antrasis \u2014 functions engine (<code>FUNCTION LOAD<\/code>, <code>FCALL<\/code>) \u2014 naujesnis dizainas, leid\u017eiantis registruoti pavadintas funkcij\u0173 bibliotekas, kurios saugomos RDB\/AOF ir sinchronizuojamos tarp klasterio mazg\u0173. B\u016btent functions engine tapo DarkReplica \u012f\u0117jimo ta\u0161ku.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP VEIKIA KLAIDA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Redis yra vienos gijos serveris. Kai Lua funkcija vykdoma per ilgai \u2014 pagal numatytuosius nustatymus ilgiau nei 5 sekundes \u2014 serveris nebegali \u012fprastu b\u016bdu apdoroti nauj\u0173 u\u017eklaus\u0173. Kad visi\u0161kai neu\u017e\u0161alt\u0173, Redis prie\u0161 vykdant Lua kod\u0105 \u012fdiegia kabliuk\u0105 per <code>lua_sethook<\/code>. \u0160is kabliukas suveikia kas 100 000 Lua instrukcij\u0173 ir i\u0161kvie\u010dia <code>processEventsWhileBlocked()<\/code>, kuri apdoroja laukian\u010dius \u012fvykius i\u0161 event loop ir palaiko serverio atsakomum\u0105 net l\u0117tos funkcijos vykdymo metu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kritin\u0117 detal\u0117: <code>processEventsWhileBlocked()<\/code> apdoroja ne tik paprast\u0173 klient\u0173 u\u017eklausas \u2014 ji tvarko visus I\/O \u012fvykius, \u012fskaitant komandas, ateinan\u010dias i\u0161 master serverio per replikacijos kanal\u0105. Ir niekas tame kelyje netikrina, ar \u0161iuo metu vykdoma Lua funkcija. Paprasti klientai, bandantys vykdyti neleistin\u0105 komand\u0105 skripto metu, gauna klaid\u0105 <code>BUSY Redis is busy running a script<\/code>. Ta\u010diau ta pati komanda <code>FUNCTION FLUSH<\/code>, ateinanti i\u0161 master serverio per replikacijos kanal\u0105 \u2014 praeis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rezultatas: Lua variklis i\u0161trinamas i\u0161 atminties master komanda tuo pa\u010diu metu, kai funkcija vis dar j\u012f naudoja. Lua aplinka atlaisvinta \u2014 ta\u010diau vykdymas toliau kreipiasi \u012f jau atlaisvint\u0105 atmint\u012f. Tai klasikinis use-after-free: atlaisvintas Lua variklis, kuris vis dar naudojamas. CWE-416 gryniausia forma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAIP TAI I\u0160NAUDOJAMA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017epuolikas, turintis autentifikuot\u0105 prieig\u0105 prie Redis serverio, vykdo toki\u0105 sek\u0105. Pirmiausia jis paleid\u017eia l\u0117t\u0105 Lua funkcij\u0105 per <code>FCALL<\/code> \u2014 toki\u0105, kuri veiks pakankamai ilgai, kad Redis pasiekt\u0173 timeout rib\u0105 ir prad\u0117t\u0173 kviesti <code>processEventsWhileBlocked()<\/code>. Tada per replikacijos kanal\u0105 \u2014 sukonfig\u016brav\u0119s kontroliuojam\u0105 \u201emaster&#8221; server\u012f \u2014 siun\u010dia komand\u0105 <code>FUNCTION FLUSH<\/code>. Redis j\u0105 priima ir sunaikina Lua varikl\u012f funkcijos vykdymo metu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gav\u0119s use-after-free, Yoni Sherez suk\u016br\u0117 technik\u0173 rinkin\u012f savavali\u0161kam proceso atminties skaitymui ir ra\u0161ymui. Jo \u017eod\u017eiais, i\u0161naudojimui reik\u0117jo gilaus Redis vidin\u0117s strukt\u016bros ir Lua 5.1 virtualios ma\u0161inos i\u0161manymo \u2014 tai ne paprastas vieno paspaudimo eksploitas. Ta\u010diau rezultatas pasiektas: savalini\u0173 sistemini\u0173 komand\u0173 vykdymas tiksliniame serveryje Redis proceso tapatyb\u0117s vardu. Pilnas techninis writeup paskelbtas ZeroDay.Cloud platformoje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>KAS NUTINKA TOLIAU \u2014 PRIKLAUSO NUO KONFIG\u016aRACIJOS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pa\u017eeid\u017eiamumas suveikia tik esant kelioms s\u0105lygoms vienu metu: autentifikuota prieiga prie Redis, galimyb\u0117 sukonfig\u016bruoti replikacijos kanal\u0105, \u012fjungtas Lua scripting (pagal numatytuosius nustatymus aktyvus) ir replika su i\u0161jungtu <code>replica-read-only<\/code>. Jei Redis visai nenaudoja replikacijos \u2014 master kanalo atakos vektorius neprieinamas. Jei Redis pasiekiamas tik i\u0161 localhost arba grie\u017etai kontroliuojamo privataus tinklo \u2014 rizika \u017eenkliai suma\u017e\u0117ja.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Labiausiai pa\u017eeid\u017eiamos konfig\u016bracijos, kuriose Redis pasiekiamas keliems klientams, naudojama replikacija ir autentifikacija silpna arba jos n\u0117ra. Tokios nuostatos da\u017enai pasitaiko k\u016brimo aplinkose ir serveriuose, kurie buvo \u201egreitai paleisti&#8221; nesilaikant joki\u0173 apsaugos gairi\u0173. Redis Cloud instancijos apsaugotos \u2014 tiek\u0117jas jau \u012fdieg\u0117 pataisymus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>REALI ATAKOS GRANDIN\u0116<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Realus scenarijus atrodo taip. \u017diniatinklio programa naudoja Redis talpyklai ir sesijoms. Redis turi slapta\u017eod\u012f, ta\u010diau jis silpnas arba nutek\u0117j\u0119s. U\u017epuolikas jungiasi tiesiogiai \u2014 per atvir\u0105 6379 prievad\u0105 arba per programos pa\u017eeid\u017eiamum\u0105, leid\u017eiant\u012f si\u0173sti savalingas Redis komandas. Serveris veikia su Redis 7.4.8, nepakeitu nuo \u012fdiegimo. U\u017epuolikas paleid\u017eia l\u0117t\u0105 Lua funkcij\u0105 per <code>FCALL<\/code>, tuo pa\u010diu metu paleid\u017eia kontroliuojam\u0105 Redis instancij\u0105 ir per <code>SLAVEOF<\/code> paskiria j\u0105 master serveriu tiksliniui serveriui. Kai Lua timeout suveikia ir Redis \u012feina \u012f <code>processEventsWhileBlocked()<\/code>, <code>FUNCTION FLUSH<\/code> komanda i\u0161 fiktyvaus master sunaikina Lua varikl\u012f. Use-after-free atveria keli\u0105 \u012f RCE. Redis veikia <code>redis<\/code> vartotojo vardu \u2014 u\u017epuolikas gauna shell su tomis teis\u0117mis, nuskaito duomenis i\u0161 atminties ir gauna prieig\u0105 prie sesij\u0173 duomen\u0173 bei programos talpyklos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CHRONOLOGIJA<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2025 m. gruodis. ZeroDay.Cloud 2025 var\u017eybos Londone. Yoni Sherez renkasi Redis kaip taikin\u012f \u2014 \u201ed\u0117l jo sud\u0117tingumo ir didel\u0117s bei \u012fdomios atakos pavir\u0161iaus&#8221;, kaip jis ra\u0161\u0117 writeup. Randa DarkReplica. Gauna $30 000. 2026 m. sausis \u2014 CVE rezervuotas. 2026 m. gegu\u017e\u0117s 5 d. \u2014 Redis i\u0161leid\u017eia pataisym\u0105 visoms penkioms palaikomoms \u0161akoms vien\u0105 dien\u0105. 2026 m. bir\u017eelio 2 d. \u2014 Yoni Sherez paskelbia piln\u0105 technin\u012f writeup ZeroDay.Cloud platformoje. \u0160e\u0161i m\u0117nesiai nuo radimo iki vie\u0161o atskleidimo. Pataisymas pasirod\u0117 m\u0117nes\u012f anks\u010diau nei technin\u0117s detal\u0117s tapo vie\u0161os. Taip ir tur\u0117t\u0173 veikti responsible disclosure.<\/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\">Redis n\u0117ra ni\u0161inis \u012frankis. Tai talpykla u\u017e j\u016bs\u0173 nginx, sesij\u0173 saugykla j\u016bs\u0173 WordPress, u\u017eduo\u010di\u0173 eil\u0117 j\u016bs\u0173 programai. Jis veikia beveik kiekviename production serveryje, kuris daro k\u0105 nors sud\u0117tingesnio nei statini\u0173 fail\u0173 tiekimas. DarkReplica paveikia visas Redis versijas su Lua scripting \u2014 tai visos versijos, kurios realiai naudojamos serveriuose. Tod\u0117l CVSS 6.1 netur\u0117t\u0173 sukelti ner\u016bpestingumo: \u201eMedium&#8221; yra atakos sud\u0117tingumo, o ne jos pasekmi\u0173 \u012fvertinimas. RCE yra RCE, nesvarbu, kiek s\u0105lyg\u0173 reikia tam pasiekti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Atskira istorija \u2014 Redis be autentifikacijos arba su silpnu slapta\u017eod\u017eiu, tiesiogiai prieinamas i\u0161 interneto. Tokioms instancijoms s\u0105lyga \u201ereikalinga autentifikacija&#8221; tiesiog i\u0161nyksta i\u0161 lygties. DarkReplica su replikacija virsta tiesioginiu keliu \u012f RCE. Toki\u0173 serveri\u0173 yra daugiau, nei nor\u0117t\u0173si pripa\u017einti \u2014 Redis istori\u0161kai buvo suprojektuotas veikti patikimame tinkle, ir daugelis administratori\u0173 vis dar elgiasi taip, lyg taip ir b\u016bt\u0173.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ATNAUJINIMAS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pataisymas i\u0161leistas 2026 m. gegu\u017e\u0117s 5 d. visoms palaikomoms \u0161akoms. Patikrinkite dabartin\u0119 Redis versij\u0105 \u2014 pirmoji komanda parodys kliento versij\u0105, antroji paklaus veikian\u010dio serverio. Jei Redis apsaugotas slapta\u017eod\u017eiu, perduokite j\u012f per \u017eym\u0105 <code>-a<\/code>; jei ne \u2014 praleiskite j\u0105:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>redis-cli --version\nredis-cli INFO server | grep redis_version\n# jei Redis reikalauja slapta\u017eod\u017eio:\nredis-cli -a J\u016aS\u0172_SLAPTA\u017dODIS INFO server | grep redis_version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tada palyginkite su pataisyt\u0173 versij\u0173 lentele. Jei j\u016bs\u0173 versija patenka \u012f paveikt\u0105 diapazon\u0105 \u2014 atnaujinkite nedelsiant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Paveiktos \u0161akos ir pataisytos versijos pagal oficial\u0173 Redis advisory:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redis 7.2.x: paveiktos 7.2.0 \u2013 7.2.13, pataisyta <strong>7.2.14<\/strong><\/li>\n\n\n\n<li>Redis 7.4.x: paveiktos 7.4.0 \u2013 7.4.8, pataisyta <strong>7.4.9<\/strong><\/li>\n\n\n\n<li>Redis 8.2.x: paveiktos 8.2.0 \u2013 8.2.5, pataisyta <strong>8.2.6<\/strong><\/li>\n\n\n\n<li>Redis 8.4.x: paveiktos 8.4.0 \u2013 8.4.2, pataisyta <strong>8.4.3<\/strong><\/li>\n\n\n\n<li>Redis 8.6.x: paveiktos 8.6.0 \u2013 8.6.2, pataisyta <strong>8.6.3<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Atnaujinimas Ubuntu\/Debian sistemose priklauso nuo to, i\u0161 kur Redis buvo \u012fdiegtas. Jei i\u0161 oficialios redis.io saugyklos \u2014 \u012fsitikinkite, kad saugykla prijungta, tada atnaujinkite. Jei saugykla dar neprid\u0117ta, oficiali redis.io instrukcija:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get install -y lsb-release curl gpg\ncurl -fsSL https:\/\/packages.redis.io\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/redis-archive-keyring.gpg\nsudo chmod 644 \/usr\/share\/keyrings\/redis-archive-keyring.gpg\necho \"deb &#91;signed-by=\/usr\/share\/keyrings\/redis-archive-keyring.gpg] https:\/\/packages.redis.io\/deb $(lsb_release -cs) main\" | sudo tee \/etc\/apt\/sources.list.d\/redis.list\nsudo apt-get update\nsudo apt-get install redis<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei saugykla jau sukonfig\u016bruota \u2014 pakanka atnaujinti paket\u0105:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get update\nsudo apt-get install redis\nredis-cli --version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Svarbu: Ubuntu ir Debian i\u0161 savo standartini\u0173 saugykl\u0173 teikia pasenusi\u0105 Redis versij\u0105 \u2014 da\u017eniausiai 6.x arba 7.0. Komanda <code>sudo apt install redis-server<\/code> be oficialios redis.io saugyklos nesuteiks reikiamos versijos \u2014 tik packages.redis.io turi aktualias 7.2, 7.4 ir 8.x \u0161akas. Po atnaujinimo paleiskite paslaug\u0105 i\u0161 naujo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart redis-server\nsudo systemctl status redis-server<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei atnaujinti \u0161iuo metu ne\u012fmanoma, Redis oficialiai apra\u0161o du laikinuosius sprendimus. Pirmasis \u2014 blokuoti Lua skript\u0173 vykdym\u0105: apribokite komandas <code>EVAL<\/code>, <code>EVALSHA<\/code>, <code>FCALL<\/code> ir <code>FCALL_RO<\/code> per ACL mechanizm\u0105 visiems vartotojams, kuriems \u0161i funkcija nereikalinga. Tikslus sintaksas priklauso nuo Redis versijos ir ACL konfig\u016bracijos \u2014 \u017er. oficiali\u0105 Redis ACL dokumentacij\u0105. Antrasis laikinasis sprendimas \u2014 \u012fsitikinti, kad visos replikos veikia su <code>replica-read-only yes<\/code>. Tai numatytoji reik\u0161m\u0117, ta\u010diau verta patikrinti tiesiogiai. Kiekvienoje replikoje vykdykite:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>redis-cli CONFIG GET replica-read-only<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei i\u0161vestis rodo <code>no<\/code> \u2014 replika pa\u017eeid\u017eiama. \u012ejunkite atgal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>redis-cli CONFIG SET replica-read-only yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kad pakeitimas i\u0161likt\u0173 po paleidimo i\u0161 naujo, prid\u0117kite \u012f <code>\/etc\/redis\/redis.conf<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>replica-read-only yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Abu laikinieji sprendimai suma\u017eina rizik\u0105, ta\u010diau nepa\u0161alina pa\u017eeid\u017eiamumo \u2014 atnaujinimas i\u0161lieka vieninteliu i\u0161samiu sprendimu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nepriklausomai nuo atnaujinimo b\u016bsenos, \u012fsitikinkite, kad Redis n\u0117ra tiesiogiai pasiekiamas i\u0161 interneto. Prievadas 6379 turi b\u016bti u\u017edarytas ugniasien\u0117je visiems, i\u0161skyrus patikimus IP adresus. Patikrinkite per nftables:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nft list ruleset | grep 6379<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jei i\u0161vestis tu\u0161\u010dia \u2014 n\u0117ra ai\u0161kios taisykl\u0117s tam prievadui, ir Redis arba apsaugotas bind-address konfig\u016bracijoje, arba prieinamas visiems. Patikrinkite:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>grep -E \"^bind|^protected-mode\" \/etc\/redis\/redis.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Reik\u0161m\u0117 <code>bind 127.0.0.1<\/code> rei\u0161kia, kad Redis klauso tik localhost. <code>protected-mode yes<\/code> \u2014 papildoma apsauga, blokuojanti i\u0161orines jungtis be slapta\u017eod\u017eio. Abi turi b\u016bti teisingai sukonfig\u016bruotos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I\u0160VADOS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DarkReplica primena, kad post-authentication nerei\u0161kia ma\u017eos rizikos. Autentifikacija Redis da\u017enai rei\u0161kia vien\u0105 slapta\u017eod\u012f programos ry\u0161io eilut\u0117je, o ne reali\u0105 izoliacij\u0105. Replikacijos mechanizmas \u2014 Redis dalis, kuri retai laikoma atakos pavir\u0161iumi. B\u016btent ten Yoni Sherez rado use-after-free, kurio niekas nesitik\u0117jo. Atnaujinkite Redis iki pataisytos savo \u0161akos versijos: 7.2.14, 7.4.9, 8.2.6, 8.4.3 arba 8.6.3. U\u017edarykite prievad\u0105 6379 nuo interneto, patikrinkite replikacijos nustatymus \u2014 ir \u0161is atakos vektorius jums bus u\u017edarytas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Redis veikia u\u017e pus\u0117s \u0161iuolaikinio interneto \u2014 sesij\u0173 talpykla, u\u017eduo\u010di\u0173 eil\u0117s, grei\u010dio ribojimas, pub\/sub. B\u016btent d\u0117l to pa\u017eeid\u017eiamumas jame retai lieka tik teorinis. CVE-2026-23631, pavadintas DarkReplica, yra use-after-free klaida replikacijos posistem\u0117je, kuri tam tikromis s\u0105lygomis atveria keli\u0105 \u012f savavali\u0161ko kodo vykdym\u0105 serveryje. Tyr\u0117jas Yoni Sherez j\u0105 rado ZeroDay.Cloud 2025 var\u017eybose Londone pra\u0117jusi\u0173 met\u0173 gruod\u012f ir gavo $30 000. Pataisymas i\u0161leistas 2026 m. gegu\u017e\u0117s 5 d. Jei dar neatnaujinote \u2014 skaitykite toliau. KAS NUTIKO CVE-2026-23631 \u2014 use-after-free pa\u017eeid\u017eiamumas Redis replikacijos mechanizme. CVSS 6.1 (Medium pagal CVSSv4.0), CWE-416. Oficialus Redis apra\u0161ymas: autentifikuotas vartotojas gali i\u0161naudoti master-replica sinchronizacijos mechanizm\u0105 ir sukelti use-after-free Lua funkcij\u0173 variklyje, o tai gali lemti nuotolin\u012f kodo vykdym\u0105. Pa\u017eeid\u017eiamumas paveikia visas Redis versijas su Lua scripting palaikymu \u2014 tai prakti\u0161kai visos realiai naudojamos versijos. Vienintelis apribojimas: reikalinga autentifikacija Redis serveryje. Koncepcijos \u012frodymas paskelbtas tyr\u0117jo writeup. Svarbi pastaba d\u0117l CVSS: kai kurie \u0161altiniai nurodo 8.5 High \u2014 tai senesnis CVSS v2 balas i\u0161 antrinio \u0161altinio. Oficialus Redis ir NVD \u012fvertinimas pagal CVSSv4.0 yra 6.1 Medium, su auk\u0161tu atakos sud\u0117tingumu (AC:H). Tai nerei\u0161kia, kad pa\u017eeid\u017eiamumas nepavojingas. Tai rei\u0161kia, kad s\u0117kmingai i\u0161naudoti j\u012f reikia keli\u0173 s\u0105lyg\u0173 sutapimo \u2014 ta\u010diau Yoni Sherez parod\u0117, kad tai \u012fmanoma. KAS YRA REDIS REPLIKACIJA IR LUA VARIKLIS Redis palaiko master-replica replikacij\u0105: vienas serveris skiriamas pagrindiniu, kiti \u2014 replikomis. Replika prisijungia prie master serverio, gauna piln\u0105 sinchronizacij\u0105 paleid\u017eiant, o tada priima nuolatin\u0119 komand\u0173 sraut\u0105 realiuoju laiku. Komanda SLAVEOF naudojama master serveriui priskirti. Tai standartinis mechanizmas auk\u0161tam pasiekiamumui ir skaitymo masteliavimui. Redis taip pat turi integruot\u0105 Lua varikl\u012f \u2014 tiksliau, du. Pirmasis yra scripting engine (EVAL, EVALSHA, SCRIPT LOAD) \u2014 senesnis modelis savavali\u0161kiems Lua skriptams vykdyti. Antrasis \u2014 functions engine (FUNCTION LOAD, FCALL) \u2014 naujesnis dizainas, leid\u017eiantis registruoti pavadintas funkcij\u0173 bibliotekas, kurios saugomos RDB\/AOF ir sinchronizuojamos tarp klasterio mazg\u0173. B\u016btent functions engine tapo DarkReplica \u012f\u0117jimo ta\u0161ku. KAIP VEIKIA KLAIDA Redis yra vienos gijos serveris. Kai Lua funkcija vykdoma per ilgai \u2014 pagal numatytuosius nustatymus ilgiau nei 5 sekundes \u2014 serveris nebegali \u012fprastu b\u016bdu apdoroti nauj\u0173 u\u017eklaus\u0173. Kad visi\u0161kai neu\u017e\u0161alt\u0173, Redis prie\u0161 vykdant Lua kod\u0105 \u012fdiegia kabliuk\u0105 per lua_sethook. \u0160is kabliukas suveikia kas 100 000 Lua instrukcij\u0173 ir i\u0161kvie\u010dia processEventsWhileBlocked(), kuri apdoroja laukian\u010dius \u012fvykius i\u0161 event loop ir palaiko serverio atsakomum\u0105 net l\u0117tos funkcijos vykdymo metu. Kritin\u0117 detal\u0117: processEventsWhileBlocked() apdoroja ne tik paprast\u0173 klient\u0173 u\u017eklausas \u2014 ji tvarko visus I\/O \u012fvykius, \u012fskaitant komandas, ateinan\u010dias i\u0161 master serverio per replikacijos kanal\u0105. Ir niekas tame kelyje netikrina, ar \u0161iuo metu vykdoma Lua funkcija. Paprasti klientai, bandantys vykdyti neleistin\u0105 komand\u0105 skripto metu, gauna klaid\u0105 BUSY Redis is busy running a script. Ta\u010diau ta pati komanda FUNCTION FLUSH, ateinanti i\u0161 master serverio per replikacijos kanal\u0105 \u2014 praeis. Rezultatas: Lua variklis i\u0161trinamas i\u0161 atminties master komanda tuo pa\u010diu metu, kai funkcija vis dar j\u012f naudoja. Lua aplinka atlaisvinta \u2014 ta\u010diau vykdymas toliau kreipiasi \u012f jau atlaisvint\u0105 atmint\u012f. Tai klasikinis use-after-free: atlaisvintas Lua variklis, kuris vis dar naudojamas. CWE-416 gryniausia forma. KAIP TAI I\u0160NAUDOJAMA U\u017epuolikas, turintis autentifikuot\u0105 prieig\u0105 prie Redis serverio, vykdo toki\u0105 sek\u0105. Pirmiausia jis paleid\u017eia l\u0117t\u0105 Lua funkcij\u0105 per FCALL \u2014 toki\u0105, kuri veiks pakankamai ilgai, kad Redis pasiekt\u0173 timeout rib\u0105 ir prad\u0117t\u0173 kviesti processEventsWhileBlocked(). Tada per replikacijos kanal\u0105 \u2014 sukonfig\u016brav\u0119s kontroliuojam\u0105 \u201emaster&#8221; server\u012f \u2014 siun\u010dia komand\u0105 FUNCTION FLUSH. Redis j\u0105 priima ir sunaikina Lua varikl\u012f funkcijos vykdymo metu. Gav\u0119s use-after-free, Yoni Sherez suk\u016br\u0117 technik\u0173 rinkin\u012f savavali\u0161kam proceso atminties skaitymui ir ra\u0161ymui. Jo \u017eod\u017eiais, i\u0161naudojimui reik\u0117jo gilaus Redis vidin\u0117s strukt\u016bros ir Lua 5.1 virtualios ma\u0161inos i\u0161manymo \u2014 tai ne paprastas vieno paspaudimo eksploitas. Ta\u010diau rezultatas pasiektas: savalini\u0173 sistemini\u0173 komand\u0173 vykdymas tiksliniame serveryje Redis proceso tapatyb\u0117s vardu. Pilnas techninis writeup paskelbtas ZeroDay.Cloud platformoje. KAS NUTINKA TOLIAU \u2014 PRIKLAUSO NUO KONFIG\u016aRACIJOS Pa\u017eeid\u017eiamumas suveikia tik esant kelioms s\u0105lygoms vienu metu: autentifikuota prieiga prie Redis, galimyb\u0117 sukonfig\u016bruoti replikacijos kanal\u0105, \u012fjungtas Lua scripting (pagal numatytuosius nustatymus aktyvus) ir replika su i\u0161jungtu replica-read-only. Jei Redis visai nenaudoja replikacijos \u2014 master kanalo atakos vektorius neprieinamas. Jei Redis pasiekiamas tik i\u0161 localhost arba grie\u017etai kontroliuojamo privataus tinklo \u2014 rizika \u017eenkliai suma\u017e\u0117ja. Labiausiai pa\u017eeid\u017eiamos konfig\u016bracijos, kuriose Redis pasiekiamas keliems klientams, naudojama replikacija ir autentifikacija silpna arba jos n\u0117ra. Tokios nuostatos da\u017enai pasitaiko k\u016brimo aplinkose ir serveriuose, kurie buvo \u201egreitai paleisti&#8221; nesilaikant joki\u0173 apsaugos gairi\u0173. Redis Cloud instancijos apsaugotos \u2014 tiek\u0117jas jau \u012fdieg\u0117 pataisymus. REALI ATAKOS GRANDIN\u0116 Realus scenarijus atrodo taip. \u017diniatinklio programa naudoja Redis talpyklai ir sesijoms. Redis turi slapta\u017eod\u012f, ta\u010diau jis silpnas arba nutek\u0117j\u0119s. U\u017epuolikas jungiasi tiesiogiai \u2014 per atvir\u0105 6379 prievad\u0105 arba per programos pa\u017eeid\u017eiamum\u0105, leid\u017eiant\u012f si\u0173sti savalingas Redis komandas. Serveris veikia su Redis 7.4.8, nepakeitu nuo \u012fdiegimo. U\u017epuolikas paleid\u017eia l\u0117t\u0105 Lua funkcij\u0105 per FCALL, tuo pa\u010diu metu paleid\u017eia kontroliuojam\u0105 Redis instancij\u0105 ir per SLAVEOF paskiria j\u0105 master serveriu tiksliniui serveriui. Kai Lua timeout suveikia ir Redis \u012feina \u012f processEventsWhileBlocked(), FUNCTION FLUSH komanda i\u0161 fiktyvaus master sunaikina Lua varikl\u012f. Use-after-free atveria keli\u0105 \u012f RCE. Redis veikia redis vartotojo vardu \u2014 u\u017epuolikas gauna shell su tomis teis\u0117mis, nuskaito duomenis i\u0161 atminties ir gauna prieig\u0105 prie sesij\u0173 duomen\u0173 bei programos talpyklos. CHRONOLOGIJA 2025 m. gruodis. ZeroDay.Cloud 2025 var\u017eybos Londone. Yoni Sherez renkasi Redis kaip taikin\u012f \u2014 \u201ed\u0117l jo sud\u0117tingumo ir didel\u0117s bei \u012fdomios atakos pavir\u0161iaus&#8221;, kaip jis ra\u0161\u0117 writeup. Randa DarkReplica. Gauna $30 000. 2026 m. sausis \u2014 CVE rezervuotas. 2026 m. gegu\u017e\u0117s 5 d. \u2014 Redis i\u0161leid\u017eia pataisym\u0105 visoms penkioms palaikomoms \u0161akoms vien\u0105 dien\u0105. 2026 m. bir\u017eelio 2 d. \u2014 Yoni Sherez paskelbia piln\u0105 technin\u012f writeup ZeroDay.Cloud platformoje. \u0160e\u0161i m\u0117nesiai nuo radimo iki vie\u0161o atskleidimo. Pataisymas pasirod\u0117 m\u0117nes\u012f anks\u010diau nei technin\u0117s detal\u0117s tapo vie\u0161os. Taip ir tur\u0117t\u0173 veikti responsible disclosure. KOD\u0116L TAI SVARBU Redis n\u0117ra ni\u0161inis \u012frankis. Tai talpykla u\u017e j\u016bs\u0173 nginx, sesij\u0173 saugykla j\u016bs\u0173 WordPress, u\u017eduo\u010di\u0173 eil\u0117 j\u016bs\u0173 programai. Jis veikia beveik kiekviename production serveryje, kuris daro k\u0105 nors sud\u0117tingesnio nei statini\u0173 fail\u0173 tiekimas. DarkReplica paveikia visas Redis versijas su Lua scripting \u2014 tai visos versijos, kurios realiai naudojamos serveriuose. Tod\u0117l CVSS 6.1 netur\u0117t\u0173 sukelti ner\u016bpestingumo: \u201eMedium&#8221; yra atakos sud\u0117tingumo, o ne jos pasekmi\u0173 \u012fvertinimas. RCE yra RCE, nesvarbu, kiek s\u0105lyg\u0173 reikia tam pasiekti. Atskira istorija \u2014 Redis be autentifikacijos arba su silpnu slapta\u017eod\u017eiu, tiesiogiai prieinamas i\u0161 interneto. Tokioms instancijoms s\u0105lyga \u201ereikalinga autentifikacija&#8221; tiesiog i\u0161nyksta i\u0161 lygties. DarkReplica su replikacija [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20226,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[202,194,199,155],"tags":[266,267,268,288,338,335,329,289,336],"class_list":["post-20229","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cve-lt","category-database-lt","category-linux-lt","category-saugumas","tag-cve","tag-cybersecurity","tag-infosec","tag-linux","tag-rce","tag-redis","tag-security","tag-serversecurity","tag-useafterfree"],"jetpack_featured_media_url":"https:\/\/sysadmin.courses\/wp-content\/uploads\/2026\/06\/DarkReplica-CVE-2026-23631-redis.webp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20229","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=20229"}],"version-history":[{"count":3,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20229\/revisions"}],"predecessor-version":[{"id":20236,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/posts\/20229\/revisions\/20236"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media\/20226"}],"wp:attachment":[{"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/media?parent=20229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/categories?post=20229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysadmin.courses\/lt\/wp-json\/wp\/v2\/tags?post=20229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}