Firma X zaslala předžalobní výzvu vývojáři projektu Nitter (Wikipedia), open-source alternativního frontendu k sociální síti X (ex-Twitter), a provozovatelům instancí jako XCancel, které umožňovaly číst příspěvky bez přihlášení, reklam a javascriptu. Údajně se dopouštějí „sběru dat“. Zdrojový kód Nitteru vývojář archivoval. Vývoj již dříve přerušil v roce 2024 po tehdejším omezení API X. X je dceřiná společnost SpaceXAI Elona Muska, provozující mj. kontroverzního chatbota Grok.
Bylo vydáno Ubuntu 26.04.1 LTS, tj. první opravné vydání Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek a oprav na Discourse.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2025 (pdf). Incidentů ubylo, sofistikovanost útočníků roste.
Open source softwarový stack AMD ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán v nové major verzi 10.0. S ROCm.AI. Přehled novinek v aktualizované dokumentaci.
Finanční skupina Partners se stala minulou neděli obětí kybernetického útoku, při kterém se útočníci dostali k některým osobním údajům klientů. Společnost o tom informovala ve čtvrtek. Ujišťuje, že peníze klientů nejsou v ohrožení. „Kybernetický útok zasáhl část IT infrastruktury naší společnosti. Ihned po zjištění útoku jsme s pomocí externích bezpečnostních odborníků začali intenzivně pracovat na minimalizaci škod. Útočníci se
… více »Americká technologická společnost Meta Platforms se dohodla, že zaplatí až zhruba 18 miliard dolarů (asi 373 miliard Kč) za mimosoudní urovnání sporu o závislosti dětí na sociálních sítích a provede významné změny pro jejich používání mladistvými. Téměř tři desítky států USA firmu v roce 2023 obvinily z toho, že sítě Facebook a Instagram vědomě navrhla tak, aby u dětí vyvolávaly závislost, a zatajovala tyto dopady před veřejností. Firma se
… více »Byl publikován aktuální přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Blíží se vydání podporující čipy M3. Vývojáře lze podpořit na GitHub Sponsors a Open Collective.
Kancelářský balík LibreOffice byl vydán ve verzi 26.8. Mimo jiné vylepšuje typografii a kompatibilitu s formáty MS Office, více v poznámkách k vydání.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.8. Přehled novinek v poznámkách k vydání.
Byla vydána nová verze 23.1.0, tj. první stabilní verze z nové řady 23.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++, Polly a Flang.
Bezpečnost je značně ošemetná věc, se kterou si nikdy nemůžete být stoprocentně jistí. Poznáte, co je špatně na následujícím kusu PHP kódu? Podotýkám, že se jedná o velice rozšířenou chybu, ale málokdo si ji uvědomuje.
Mějme webovou aplikaci, kam může uživatel posílat své soubory. Kromě samotného souboru volí i jeho název. Všechny soubory musí být uloženy do adresáře „soubory“. Z nějakého důvodu se v tomto adresáři interpretují PHP skripty, takže je nutno ohlídat, aby soubor neměl příponu „.php“. Kromě toho je třeba hlídat, aby vetřelec nemohl zapsat nic mimo tento adresář.
Skript je následující:
function JeBezpecnySoubor($nazev) {
$malymi = StrToLower($nazev);
if (SubStr($malymi,-4) == '.php')
return false;
if (StrPos($malymi,'/') !== false)
return false;
return true;
}
if (JeBezpecnySoubor($_GET['nazev_souboru'])) {
$fp = FOpen('soubory/'.$_GET['nazev_souboru'], 'w');
...a tak dále
Neuvažujte jiné ošetřované přípony než „.php“ a jiný oddělovač adresářů než lomítko. Server běží na standardním unixovým stroji, ale podobně by to fungovalo prakticky kdekoliv. Neuvažujte jako chybu možnost přepsání souboru. Chyba se netýká žádných speciálních vlastností PHP.
Aktualizace: Správné řešení jako první objevil AraxoN, jinou chybu objevil dark. Gratuluji
Tato hádanka byla myslím celkem těžká, řešení jsem proto popsal v samostatném článku.
Tiskni
Sdílej:
V php se moc nevyznám, ale kdyby uživatel poslal soubor s názvem ".." tak dostane zápisové právo do nadřazeného adresáře?
nechci to zkoušet, ale nešlo by $_GET['nazev_souboru'] dát třeba "osklivyskript.php?neco=jpg"?
ne, samozřejmě že nešlo ;)
Ja tam vidím len to, že môže prepísať iné súbory, ktoré tam už sú, ale to asi nebude tá chyba, lebo to by bolo príliš jednoduché. 
Zkusím vylučovací metodu:
1) Pokud to zde je napsané, asi na tom něco bude, tedy kód není čistý
2) V podmínce je, že jsou v daném adresáři i skripty (což je na pováženou, ale budiž), takže spuštění skriptu v tom adresáři je podmínka nebezpečnosti
3) V php nedělám, ale kód nepustí soubor s příponou .php a lomítkem. Nejedná se tedy o bezpečnosti typu přepsání souboru mimo tento adresář (takže riziko se bude odehrávat nejspíš v daném adresáři)
4) Kód neošetřuje .htaccess, je riziko spojené s tímto?
Ke čtvrtému bodu:
Wow, soubor .htaccess by to opravdu vzalo a pomocí něj by se např. daly definovat jako PHP skripty i soubory s jinou příponou, které by aplikace pustila. Takže ano, gratuluji, na jednu chybu jste přišel 
Nicméně tuto chybu jsem neměl na mysli, hledejte dál 
Soubor s hesly by měl být někde úplně mimo (třeba v /etc).
Neberu to jako webserver, ale jako webovou aplikaci – tu si můžeš klidně nainstalovat jako baliček systému a je celkem normální, aby měla svůj adresář v /etc, jako všechny ostatní aplikace.
Pokud je to na webhostingu nebo je potřeba tu aplikaci provozovat ve víc instancích, je spráné, abys měl strukturu třeba:
/var/www/virtual/nějakáDoména/htdocs/ ← tohle zprístupní apache přes HTTP /var/www/virtual/nějakáDoména/etc/ ← tady budou soubory s hesly /var/www/virtual/nějakáDoména/dalšíAdresář/ ← třeba zálohy nebo nějaké dočasné soubory
Každopádně bych dal soubor s hesly mimo adresář, který je zpřístupněný přes HTTP a nespolíhal bych se jen na ochranu pomocí .htaccess nebo dokonce ochranu pomocí aplikace.
Tak to asi mám... alebo som objavil ešte nejakú inú chybu. 
Ak $_GET['nazev_souboru'] obsahuje na konci znak \0 (nulový bajt), tak substr() vráti "php\0" a nie ".php", lebo dĺžku reťazca PHP nevedie podľa znaku \0. Naproti tomu fopen() predá parameter volaniu API OS, ktorý je v C-čku, znak \0 pre neho znamená koniec reťazca a všetko počnúc týmto znakom už neberie do úvahy.
fuj.php\0.txt neprojde? Nebo od kdy to php zahazuje?
Btw. afaik sa pomocou GET nedajú uploadovať súbory...
Ha, on je zásadní rozdíl mezi HTTP metodou GET a PHP proměnnou GET. Ta druhá „funguje“ i u ostatních metod, prostě jsou do ní zpracovány parametry z URL...
A není to vzhledem k problému úplně fuck?
POST i GET se dají míchat dohromady:
<?php echo ($_REQUEST["foo"] . "<br/>"); echo ($_REQUEST["bar"] . "<br/>"); ?> <form action="hack.php?foo=nazdar" method="post"> <input type="text" name="bar" value="bazar"/> <button>poslat</button> </form>
(neřešte validitu HTML, je to jen malý příklad)
Takže GETem můžeš poslat třeba název souboru a POSTem samotný soubor (ale je otázka, proč by to tak chtěl někdo dělat, když může POSTem poslat všechno).
Tohle funguje:
<?php $jmeno = "hack.php\0"; $fp = FOpen($jmeno, "rw"); $obsah = fread($fp, filesize($jmeno)); fclose($fp); echo(nl2br(htmlspecialchars($obsah))); ?>
Výpíše soubor „hack.php“. Ale ta \0 je přímo v PHP kódu, když se ji tam snažíš procpat přes GET, tak se asi někde ztratí.
?promenna=neco%00neco, tak tam ten nulový bajt opravdu je…
Tak proč to harovi nefunguje?
FOpen považuje a SubStr nepovažuje – taková blbost, ale kolik to dokáže nadělat škody, co?
IMHO je zásadní chyba, že se testují jen některé části jména. Správný přístup je pomocí regulárních výrazů přesně definovat, jak jméno souboru má vypadat...
Jiste, p*čoviny se dají dělat i s pomocí regexp... klidně se tam dá rovnou dát „^.*$“, že ano...
^[a-z0-9]+\.[a-z0-9]+$Ale test na příponu bych musel udělat stejně zvlášť.
Máte pravdu, to mě prvně nenapadlo. To je další vážná chyba. 
Neumim PHP ani programovat weby, ale neni to v tom, ze se testuji jen lowercase ".php"? Tzn. pokud nekdo vytvori soubor ".PHP", tak ten pak mozna pujde pustit, protoze z URL se bude brat case-insensitive?
Kua, chlape, ty nečteš zadání? Viz:
Neuvažujte jiné ošetřované přípony než „.php“ a jiný oddělovač adresářů než lomítko.
Možná bych si nejdřív ověřil, zda-li se opravdu jedná o uploadnutý soubor - viz is_uploaded_file() a pak ho pomocí move_uploaded_file() uložil na správné místo.
Ano, například z něj udělat xyz/adresar/zakerny_skript.php, že? Doporučoval bych přečíst a pochopit nejdříve zadání a pak blbě kecat 
$fp = FOpen('soubory/'.$_GET['nazev_souboru'], 'w');
jenom mne napadlo, jestli by se nedalo nahradit '.php' necim jako je '%20' u mezery ...
pokud bych to zkousel, asi tohle je nejjednodussi (a mozna i nejelegantnejsi) zpusob
:)
$_GET už je odescapovaný, takže odescapovat ho znovu by byla chyba (a dobrý způsob, jak do programu zavléct nějakou bezpečnostní díru).
POST /blog/EditDiscussion HTTP/1.1 Host: www.abclinuxu.cz User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en; rv:1.9.1.2) Gecko/20080528 Fedora/2.26.3-3.fc11 Epiphany/2.22 Firefox/3.5 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: cs Accept-Encoding: gzip,deflate Accept-Charset: UTF-8,* Keep-Alive: 300 Connection: keep-alive Referer: http://www.abclinuxu.cz/blog/EditDiscussion?action=add&threadId=0&dizId=142779&rid=276521 Cookie: __utma=184452854&ehllip; Content-Type: multipart/form-data; boundary=---------------------------4290172515652242791849073854 Content-Length: 26069 -----------------------------4290172515652242791849073854 Content-Disposition: form-data; name="title" Re: Kdy.. housing, tak NE v Casablance -----------------------------4290172515652242791849073854 Content-Disposition: form-data; name="text" vggdt -----------------------------4290172515652242791849073854 Content-Disposition: form-data; name="attachment"; filename="chata_cela_bok_small.png" Content-Type: image/png .PNG . ... IHDR...q...U.....~C......sRGB....... .IDATx.....k.}..y........}......E..(Q....&yS%.../2.T.f..]N.35.T<.=....b'.mI.,..(.....E.K.}.}o4.;...<...x......A. ...p.|....<..N[