Fedora se stala oficiální distribucí WSL (Windows Subsystem for Linux).
Společnost IBM představila server IBM LinuxONE Emperor 5 poháněný procesorem IBM Telum II.
Byla vydána verze 4.0 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.
Podpora Windows 10 končí 14. října 2025. Připravovaná kampaň Konec desítek (End of 10) může uživatelům pomoci s přechodem na Linux.
Již tuto středu proběhne 50. Virtuální Bastlírna, tedy dle římského číslování L. Bude L značit velikost, tedy více diskutujících než obvykle, či délku, neboť díky svátku lze diskutovat dlouho do noci? Bude i příští Virtuální Bastlírna virtuální nebo reálná? Nejen to se dozvíte, když dorazíte na diskuzní večer o elektronice, softwaru, ale technice obecně, který si můžete představit jako virtuální posezení u piva spojené s učenou
… více »Český statistický úřad rozšiřuje Statistický geoportál o Datový portál GIS s otevřenými geografickými daty. Ten umožňuje stahování datových sad podle potřeb uživatelů i jejich prohlížení v mapě a přináší nové možnosti v oblasti analýzy a využití statistických dat.
Kevin Lin zkouší využívat chytré brýle Mentra při hraní na piano. Vytváří aplikaci AugmentedChords, pomocí které si do brýlí posílá notový zápis (YouTube). Uvnitř brýlí běží AugmentOS (GitHub), tj. open source operační systém pro chytré brýle.
Jarní konference EurOpen.cz 2025 proběhne 26. až 28. května v Brandýse nad Labem. Věnována je programovacím jazykům, vývoji softwaru a programovacím technikám.
Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.
Upgrade done.
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
If you see:
vulnerable this is a testThen you are vulnerable and need to update your system.
env x='() { :;}; echo more space' bash -c "rm -rf ."
To ale pomůže jen na Ext{3,4}.
Prosím, nepanikařte:
~$ mkdir asdf
~$ cd asdf
~/asdf$ rm -rf .
rm: cannot remove directory: `.'
Sorry, blbá HTMl značka. Správně:
~$ mkdir asdf ~$ cd asdf ~/asdf$ rm -rf . rm: cannot remove directory: `.'
To ale testuje jen jednu část problému. Tohle je neméně zajímavé:
env /bin/false='() { echo ahoj; }' bash -c /bin/false
Closed Source? http://www.opensource.apple.com/source/bash/
Pokud máte někde tak jako já ještě nasazený debian6, tak je nutné přidat si apt repozitář
deb http://http.debian.net/debian/ squeeze-lts main contrib non-free deb-src http://http.debian.net/debian/ squeeze-lts main contrib non-free
https://wiki.debian.org/LTS/Using
(stačí main)
a poté upgradovat bash. Původní repozitáře včetně security mi v tuto chvíli stále nabízely zranitelnou verzi.
system()
, čímž pokryl to, co v kontextu předchozího komentáře chybělo.
Ja osobne som toto pochopil tak, ze CGI skript nemusi byt v bashi, staci aby CGI skript (v akomkolvek jazyku) pouzil system() a je to derave.Chápu to podobně, až na to, že se nejedná o CGI skript napsaný v bashi, ale skript spuštěný jakýmkoli mechanismem, který nastavuje proměnné prostředí z klientem dodaných dat. Už začínám chápat, v čem jsme si nerozuměli. Zatímco R počítal se zavoláním bashe z důvodu, že je (CGI) skript identifikován jako shellovský skript (pomocí shebang, přípony, ...), chrono upozornil na možnost spuštění bashe díky volání
system()
, ale nespecifikoval, jak k němu dojde. Ty jsi to interpretoval jako volání z (CGI) kódu webserveru, já jsem to identifikoval jako volání system()
z ḱódu webové aplikace, které jsou nějaká data od klienta předána pomocí proměnné prostředí (což platí pro CGI a podobné mechanismy).
Zjevně ani jednomu z nás nedošla ta víceznačnost a nakonec tím mohl myslet kteroukoli možnost nebo dokonce obě dohromady. Každopádně díky za podrobnější rozepsání, takhle je to užitečné i pro mě ;).
res=`wget -O - url`
? :)
authorized_keys
nastavené command="handler_v_bashi"
. Samozřejmě mi to hned kamarádi exploitli.
Dále mám jeden web s CGI, kterému ale naštěstí nepředávám environment.
Tu mu „handler_v_bashi“ něco předáváš?
Ptám se bo nevím, pokud je tam jen příkaz, který se má provést, jak využiješ této zranitelnosti?
Tu mu „handler_v_bashi“ něco předáváš?U toho botnetu mu předávám jako parametr číslo bota, v druhé aplikaci mu nepředávám nic. Exploitnout to ale jde v obou případech, protože mu to předává SSH.
Ale ti kamarádi to exploitli jen protože svěřuješ botům ssh klíč ne (a kamarádi mají přístup k botům)?Ano, svěřuji, ano, mají. Dokonce mám dva boty: jedno je IRC bot (Jendabot, k vidění na #brmlab), do kterého se posílají zprávy třeba z pokladničky v brmbaru (bonzuje dlužníky). Druhý systém, naprosto nezávislý, je síť plastových krabiček s Raspberry Pi, které sbírají data. Samozřejmě není problém pro člověka s fyzickým přístupem krabičku rozdělat a klíč dumpnout. V tom handleru, který se spouští, je samozřejmě přísný sanitizing - kontroluje se například, kolik dat bot poslal, aby nešlo vyleakovat místo na disku, formát dat a tak. Ale to je samozřejmě úplně k prdu, když si bokem spustí netcat se shellem.
ssh -R
a já se tam můžu připojit a ladit) a napadlo mě tohle. Nechtělo se mi to implementovat od nuly.
iptables -A INPUT -m string --hex-string '|28 29 20 7B|' --algo bm -j DROP
Doufám, že to zabrání škodám než vyjde pořádná oprava.
$ grep "() {" logs/access_log
209.126.230.72 - - [25/Sep/2014:03:30:18 +0200] "GET / HTTP/1.0" 200 1369 "() { :; }; ping -c 11 209.126.230.74" "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
89.207.135.125 - - [25/Sep/2014:08:32:22 +0200] "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" 404 300 "-" "() { :;}; /bin/ping -c 1 198.101.206.138"
egrep '"\s*\([^)]*\)[^{]*{' *access_log*
89.207.135.125 - - [25/Sep/2014:08:16:53 +0200] "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" 404 345 "-" "() { :;}; /bin/ping -c 1 198.101.206.138"Pingnul jsem je ručně, ještě se nic nestalo.
() { ignored; }; : :(){ :|:& };:
bash: varování: x: ignoring function definition attempt bash: chyba při importu definice „x“ this is a testMně to píše viz výše ... Název: bash, Verze: 4.2-68.4.1 , Opensuse 13.1
Napadá mě spousta otázek.
Proč je kolem běžné tuctové chyby nevalného významu takový hloupý humbuk? Proč se všichni tváří důležitě, jako by zrovna vlítlo hovno do větráku? Jak může někdo zcela vážně tvrdit, že Bash, který sám od sebe neposlouchá na síti, má „remotely exploitable“ chybu? Proč o tom hloupý bulvár píše, jako by to byla chyba v samotném Linuxu a jako by to snad ohrožovalo desktopy, na kterých neběží žádný server?!
Jak dlouho se ještě hodlají všichni tvářit jako na pohřbu a předstírat, že je to opravdu něco důležitého, něco tajemného, něco extrémně nebezpečného? Sice si nikdo neumí to děsivé nebezpečí skoro ani představit, ale o to děsivější to je, že ano.
To je fakt úsměvné a celé to šílenství mě opravdu náramně baví.
Zabezpečení systému sestává z mnoha vrstev a tady selhala nanejvýš jedna z nich, navíc používaná jen v nepatrném zlomku případů. Například konkrétní důsledky pro můj server jsou zcela jasné: Uživatel, který má správný soukromý SSH klíč, může obejít autentifikaci v Gitolite (pokud pošle bashi přes SSH tu správnou definici funkce) a na základě toho pak poškodit všechny Git respository, včetně těch, k nimž mu Gitolite za normálních okolností nepovolí přístup. Takže pokud by selhala první linie zabezpečení (SSH autentifikace), například kvůli ukradenému soukromému klíči nebo nakrknutému uživateli, byly by pak Git repository vystavené riziku. Musely by pak být obnoveny ze záloh. Jaká hrůza!!!
Nikde v tom ale není žádný root exploit, žádná možnost poškozovat něco mimo adresář s Git repository ani nic podobného.
Samozřejmě je vhodné okamžitě aktualizovat Bash. O tom není sporu. Ale bylo by super, kdyby přestaly všechny ty zděšené výkřiky. Zase tu vidíme dvojí metr v akci. Ve Windows jsou mnohem závažnější chyby naprosto běžné. Byly tam exploity, které uměly spustit kód ukrytý v archivech, v obrázcích či všude možně a chyby tohoto typu se objevují poměrně často. Nikdy jsem ale neviděl, že by nějaký bulvár kvůli tomu takhle vyšiloval.
Jak může někdo zcela vážně tvrdit, že Bash, který sám od sebe neposlouchá na síti, má „remotely exploitable“ chybu?Pretože ak program, ktorý počúva na sieti, spúšťa nejaký príkaz, tak je možné, že na to bude využitý práve bash (a napr. pomocou CGI nie je problém dostať vhodne pripravené dáta do premennej prostredia).
Jasně, ale pořád je trochu oxymoron říkat tomu „remote exploit v Bashi“.
Servery můžou různé programy spouštět mnohem efektivněji bez použití shellu — prostě zavolají execve()
a je vymalováno. Použití bashe pro tyto účely podle mě nebude zdaleka tak časté, jak se zdá. Leda že by někdo chtěl z PHP spouštět nějakou složitou pipeline za použití shellu. (Pak mě ale nepřekvapuje, že kromě problémů s efektivitou může mít takový návrh i bezpečnostní nedostatky.) Gitolite přes SSH prostě nemá na výběr, protože bash se spustí dřív než cokoliv jiného. Většina ostatních aplikací ovšem na výběr má a to platí o pro webové servery.
Servery můžou různé programy spouštět mnohem efektivněji bez použití shellu — prostě zavolají execve()
a je vymalováno.
A nebo taky system()
...
Jasně, 2% webserverů, jaká to hrůza! Přesně v tom je celá pointa! Já prostě tvrdím, že nemá žádný smysl děsit běžné uživatele desktopů bulvárními poplašnými zprávami.
Pro odborníky a správce serverů je tato zpráva samozřejmě důležitá a musí se podle ní zařídit. (Například kvůli Gitolite, jak už jsem psal.) Je ovšem hloupé, když na rádoby technicky zaměřených webech publikují poplašné zprávy lidé, kteří si pletou Linux s Bashem. (Řeč je o výše odkazovaném článku na technet.idnes.cz.) To je klasický dvojí metr. Je zajímavé, že média nijak zásadně neječela a nepanikařila, když řádil Sasser a pozdější slavné exploity pro Windows, zatímco údajně kritická (a ve skutečnosti prostě tak nějak průměrná a nijak výjimečná) chyba v Bashi je najednou kus senzace a „chyba Linuxu“.
Jsou vaše jízlivé poznámky o odbornících na všechno pouhý egoobranný reflex v argumentační nouzi, nebo mají nějaký hlubší význam?
protože ten klíč k certifikátu si přes ni přečtete taky
Jak?
Jasně, ale pořád je trochu oxymoron říkat tomu „remote exploit v Bashi“.To je slovickareni. Obdobne bychom taky mohli rict, ze Heartbleed v OpenSSL vlastne nebyla remote exploitelna chyba, protoze to je jen knihovna a ta sama nikde neposloucha. Remote expoitelna byla az kombinace OpenSSL s nejakym demonem. Nicmene ten rozdil neni moc relevantni.
Musely by pak být obnoveny ze záloh. Jaká hrůza!!!
No ono to taky nemusí být tak nevinné jako mazání... Pokud se někdo dostane k repozitory, ke které nemá jinak přístup, může do SW v ní propašovat nějaký svůj backdor aniž by si toho kdokoliv všimnul. A to už taková prdel neni...
Samozřejmě. Pokud by se útočník dostal k některému z SSH klíčů uživatelů, mohl by pak v Gitu dělat cokoliv. Ještě snáze proveditelná hrozba než změny kódu je i pouhé nahlížení do repository, jejíž majitel spoléhá, že do ní nikdo jiný nevidí.
Problém v Bashi tedy zredukoval složitý systém oprávnění v Gitolite v podstatě do stavu, kdy všichni můžou všechno (jakmile mají povolený SSH klíč). To je nepříjemné až na půdu.
Ale tohle se naštěstí týká jen správců serverů, nikoliv nějakého domácího uživatele s desktopem, který na tom desktopu žádné serverové služby neprovozuje. Pokud tedy nenaklonuje software s backdoorem z napadené Git repository.
To s Apache a CGI je jistě riziko a je prostě bezva se něčemu takovému vyhnout. Naštěstí na běžném uživatelském desktopu nic takového s největší pravděpodobností v provozu není.
Mechanismus útoku pomocí falešného DHCP serveru a Bashe už existuje, vzhledem k tomu, že DHCP klient většinou spouští nějaké divně napsané konfigurační skripty. Bezesporu jde o velké riziko a bezesporu je potřeba aktualizovat Bash a případně konečně vymyslet nějaké bezpečné DHCP klienty.
Nejde ale o žádné „extrémní nebezpečí“ pro všechny uživatele. DHCP totiž funguje pouze na lokální síti. Takže útok by vyžadoval, aby si někdo z lidí na lokální síti spustil svůj vlastní DHCP server, který by mohl, bude-li mít štěstí a odpoví-li s menší latencí než „oficiální“ DHCP server, podstrčit klientům kód ke spuštění pod rootem. To je ve větších sítích jistě proveditelné, ale nemá smysl děsit uživatele zkazkami, že se jim v jejich domácí síti se dvěma a půl počítači něco takového stane.
Proč je kolem běžné tuctové chyby nevalného významu takový hloupý humbuk?Je to chyba v interpretu (casto pouzivaneho) programovaciho jazyka, ktera pomerne brutalnim zpusobem narusuje barieru mezi daty a kodem. V dusledku toho je deravy kazdy program bezici v danem interpretu, kteremu se predavaji urcitym zpusobem data z jine bezpecnosti domeny.
jako by to snad ohrožovalo desktopy, na kterých neběží žádný server?!Kdyz se clovek chvili zamysli, tak ho napada spousta mist, kde by tato chyba mohla narusit bezpecnost na desktopech. Napr. suid program spoustici podprogram a zachova pri tom nektere whitelistovane promenne. Nebo mailovy klient poustici helper pro prilohu a predavajici v promennych metadata z MIME hlavicek. Potencialncih moznosti je spousta. Jaka jsou realna rizika v bezne out-of-the-box nainstalovane desktopove distribuci je ale pomerne zajimava otazka.
S tím ale běžní desktopoví uživatelé nemůžou nic dělat. Zase o důvod víc, proč je neděsit bulvárními zprávami o apokalypse. Ještě jim někdo začne tvrdit, aby třeba tak týden nepoužívali web, protože zrovna teď můžou být všude viry.
Ale proč by ten suid program měl používat Bash ke spouštění něčeho? Použití execve()
je nakonec i mnohem snazší a žádný Bash v tom nefiguruje. Pokud potřebuje nějaké složité expanze názvů souborů, na které by potřeboval použít shell (aby je nemusel sám implementovat), může si přece execnout bash jen s potřebným „echo wildcard“ příkazem, bez jakýchkoliv dalších součástí příkazové řádky a zejména bez prefixů v podobě přiřazení proměnných. Přesně tohle řešení bych zvolil já, kdybych už ten shell fakt spouštět musel. Ten suid program má přece kompletní kontrolu nad tím, co tomu Bashi předá a co ne. Proto by mu měl chtít předat jen nezbytné minimum. Proměnné mu může předat přímo v execve() pomocí klasického environment pole a tím se úplně vyhne parsování potenciálně škodlivého přiřazení proměnné/funkce Bashem.
Neumím si moc představit suid program, který by byl ochotný vygenerovat nějaký podezřelý skript pro Bash přímo ze vstupu od uživatele a ten Bash pak jako root spustit. Takový suid program bych nechtěl nikde mít.
Tohle je jeden z mnoha důvodů, proč si myslím, že rizika nejsou tak velká, aby stála za ten extrémní povyk, který se kolem toho najednou strhl.
Neumím si moc představit suid program, který by byl ochotný vygenerovat nějaký podezřelý skript pro Bash přímo ze vstupu od uživatele a ten Bash pak jako root spustit. Takový suid program bych nechtěl nikde mít.Já také ne. Ještě štěstí, že o tom předřečník nepsal.
To sice ne, ale je to jeden z mála možných (a krajně nepravděpodobných) scénářů, kvůli kterým by se pomocí nějakého suid programu dal nějak zneužít tento bug v Bashi. Pokud suid program něco spouští standardním způsobem pomocí execve()
, může spouštěnému procesu předat proměnné prostředí, jaké chce, a žádný Bash v tom nebude hrát roli.
Ale proč by ten suid program měl používat Bash ke spouštění něčeho? Použití execve() je nakonec i mnohem snazší a žádný Bash v tom nefiguruje.To ti moc nepomuze, pokud samotny spousteny program je (pevny, negenerovany) bashovy skript. V pripade suid programu bych pouziti execve() ocekaval, ale v ostatnich zminovanych pripadech (napr. mailovy klient spostici helper na prilohu, mail filter a la procmail spoustici externi program na filtrovani mailu) bych cekal spis ten system().
To ti moc nepomuze, pokud samotny spousteny program je (pevny, negenerovany) bashovy skript.Nebo někdo udělal program.real a do program z nějakého důvodu napsal shellový wrapper. A že jich je. Na mém systému 157.
for d in `echo $PATH|tr ":" " "`; do find $d -maxdepth 1 -type f | while read res; do file $res; done; done|grep "Bourne-Again shell script"|wc -l 157
execve()
, tedy zcela bez parsování shellem. Klidně se dá sestavit celá pipeline bez jakéhokoliv použití Bashe. Web, který spouští příkazy tak, že napřed vyrobí command line a pak na to spustí celý shell (protože to asi vyžaduje nějaké netriviální shellové expanze, třeba jmen souborů atd.), mi připadá jako ošklivé a neefektivní řešení. Že by taky mohlo být nebezpečné, pokud se Bash nechová správně, to mě nepřekvapuje ani trochu. Takto navrženým softwarovým systémům je třeba se vyhnout.Jak už jsem psal, samozřejmě je nutné Bash okamžitě aktualizovat, o tom se nepřu. Ale je naprosto nesmyslné děsit uživatele (běžné desktopové) nějakou poplašnou zprávou o extrémně nebezpečné chybě. Nic takového na jejich systémech není.
V takovém případě ale má beztak oprávnění spouštět tam jakékoliv příkazy i uživatelské relace, takže tím žádné zabezpečení neobchází a nepotřebuje obcházet. Chyba v Bashi tedy v tom případě na situaci nic nemění.Asi jsem se špatně vyjádřil. Na (nedůvěryhodném) botovi běží ssh klient, který se připojuje na botmastra, kde se spustí handler a pak si povídají přes stdin a stdout sshčka, tedy stejná situace, jako u toho gitu.
Máš web, který spouští příkazy? A co má být? Spousta příkazů se přece dá spustit pomocí běžného execve(), tedy zcela bez parsování shellem. Klidně se dá sestavit celá pipeline bez jakéhokoliv použití Bashe. Web, který spouští příkazy tak, že napřed vyrobí command line a pak na to spustí celý shell (protože to asi vyžaduje nějaké netriviální shellové expanze, třeba jmen souborů atd.), mi připadá jako ošklivé a neefektivní řešení.Spousta prasičů (včetně mě) tohle, tedy jestli použít execve, nebo system/popen, neřešila. A jak ukazují automatické scany Internetu, je to opravdu leckde.
V nějakém mailovém filtru, byť napsaném v Bashi, by se muselo provádět jakési nastavování proměnných přímo podle textu z toho mailu, aby se dalo vhodně strukturovaným mailem zaútočit.Nebo ti to mailserver nastaví do proměnných prostředí FROM a TO.
Ale je naprosto nesmyslné děsit uživatele (běžné desktopové) nějakou poplašnou zprávou o extrémně nebezpečné chybě. Nic takového na jejich systémech není.Protože běžný uživatel nemá na desktopu DHCP klienta.
Samotné nastavení proměnných FROM a TO ještě nemusí vadit. I kdyby mail server spouštěl při každé zprávě Bash (což by jeho throughputu ani trochu nesvědčilo), může přece předat FROM a TO Bashi pomocí toho klasického environment pole v execve()
. Tím se vyhne jakémukoliv parsování nějakých přiřazení přímo Bashem a všechny programy, které pak Bash spustí, FROM a TO dostanou.
Někdo DHCP klienta má, někdo ne. Ale to není až tolik podstatné, protože falešný DHCP server, třeba takový, by musel být na stejné podsíti jako klient(i), takže útok přes DHCP není žádná extrémní hrozba, která by mohla přijít „z Internetu“. (To má ale zase ten nepříjemný důsledek, že skoro všechny implementace DHCP klientů jsou děravé a spoléhají se poněkud idiotsky, že DHCP server je důvěryhodný.) Výše odkazovaný článek na technet.idnes.cz ovšem šíří poplašnou zprávu, že když ten jednoduchý test na exploit v Bashi ukáže příslušné echo, systém je nějak zásadně ohrožený. To ale prostě není pravda. Ve veřejné WiFi síti nebo ve velké firemní síti je rozhodně důvod k obavám a k obezřetnosti, ale v nějaké domácí síti, kde má uživatel většinou zhruba tak jeden počítač, žádné extrémní riziko nečíhá. Samozřejmě za předpokladu, že NSA neovládla počítač toho uživatele někdy dřív, když byl ve vhodné veřejné síti.
Jak už jsem několikrát psal, nepřu se ani náznakem o nutnosti co nejdřív aktualizovat systém. (Sám si aktualizuji systém minimálně dvakrát denně, takže bych byl ten poslední, kdo by byl proti.) Jen se mi nelíbí ten dvojí metr, kdy bug v Bashi vyvolává senzaci a označuje se za „extrémně nebezpečnou chybu v Linuxu“, zatímco nad některými jinými slavnými systémy nikdo příliš nepanikaří.
Kdyby, může... je ovšem naprosto nepodstatné. Důležité je, jak to každý z těch X mailserverů (a výše bylo myslím jasně ukázáno, že nejen mailserverů, dhcp klientů, webserverů, PHP aplikací, CGI skriptů....) reálně dělá. A to je další velký problém téhle chyby. V tuhle chvíli nikdo není přesně schopen zhodnotit její dopad, protože vlastně pořádně nevíme, kde všude u SW, který se skutečně používá, k využití bashe dochází. A i když to bude jasné ze zdrojáků, tak je potřeba přičíst ještě to, že bash bývá velice často používán jako univerzální lepidlo. Které je teď bohužel trochu toxické....i kdyby mail server spouštěl při každé zprávě Bash (což by jeho throughputu ani trochu nesvědčilo), může přece předat FROM a TO Bashi pomocí toho klasického environment pole v
execve()
.
I kdyby mail server spouštěl při každé zprávě Bash, může přece předat FROM a TO Bashi pomocí toho klasického environment pole v execve(). Tím se vyhne jakémukoliv parsování nějakých přiřazení přímo Bashem a všechny programy, které pak Bash spustí, FROM a TO dostanou.Děkuji za názornou ukázku toho, že nikdo neví, co přesně chyba postihuje a nepostihuje. Pokud spustíme bash pomocí
execve(2)
a nasypeme mu to do **envp
, tak jsme na rozdíl od nějakého blbého fork(2)
všichni safe, že ano?
root@raspberrypi:~# cat test.sh #!/bin/bash echo a echo $@ echo b env root@raspberrypi:~# chmod +x test.sh root@raspberrypi:~# cat test.c #include <stdio.h> #include <unistd.h> int main(int argc, char **argv) { char * envir[1] = { "ble=() { :;}; echo vulnerable" }; execve("./test.sh", NULL, envir); } root@raspberrypi:~# gcc test.c root@raspberrypi:~# ./a.out vulnerable a b PWD=/root SHLVL=1 ble=() { : } _=/usr/bin/env
(To má ale zase ten nepříjemný důsledek, že skoro všechny implementace DHCP klientů jsou děravé a spoléhají se poněkud idiotsky, že DHCP server je důvěryhodný.)Proboha, které a jak to dělají? K celému threadu: ano, jsem ochoten uznat, že u desktopů to není tak závažné.
Máš web, který spouští příkazy? A co má být? Spousta příkazů se přece dá spustit pomocí běžného execve(), tedy zcela bez parsování shellem. Klidně se dá sestavit celá pipeline bez jakéhokoliv použití Bashe.Za domácí cvičení si to zkuste v PHP.
Protoze je to dira az na pudu. Jakakoliv aplikace, ktera zapise do env promennych a pak spusti skript - coz je rozsirena metoda predavani promennych skriptum je derava.Si pamatuju, jak mi kdysi někdo říkal něco jako Nepředávej parametry od uživatele jako parametry na příkazové řádce, pokud to spouštíš v shellu, posereš se z escapování. Nastav mu je do prostředí a ve skriptu si je přečti, to je bezpečnější.
Popravdě řečeno, když na svém apachi nechám vyblít phpinfo(), tak v sekci "Evironment" je tohle (sry, bez tabulky):
Variable Value APACHE_RUN_DIR /var/run/apache2 APACHE_PID_FILE /var/run/apache2.pid PATH /usr/local/bin:/usr/bin:/bin APACHE_LOCK_DIR /var/lock/apache2 LANG C APACHE_RUN_USER www-data APACHE_RUN_GROUP www-data APACHE_LOG_DIR /var/log/apache2 PWD /
Můžete mi někdo říct, jak u všech všudy přes tohle někdo chce provést útok na (PHPkové) system() nebo popen()?
Popravdě bych spíš za bezpečnostní díru považoval, pokud apache/PHP automaticky do proměnných prostředí cokoliv cpal. (A pokud to tam bude cpát PHP, tak bych čekal, bude ošetřena syntax právě tak, aby tam nešlo něco takového vložit...)
eval
zaujatý už dávno. :-)
Tiskni
Sdílej: