Computerbeveiliging - Hoe je bad guys buiten de deur houdt

remote exploit op bash

24-09-2014, 20:47 door ej__, 20 reacties
Laatst bijgewerkt: 24-09-2014, 20:58
Deze is ernstig. Heel ernstig. Patchen is het devies en wel nu...

Debian update is uit.

https://marc.info/?l=oss-security&m=141157106132018&w=2

Zie ook http://linux.slashdot.org/story/14/09/24/1638207/remote-exploit-vulnerability-found-in-bash
Reacties (20)
24-09-2014, 21:18 door Anoniem
RedHat 6 / Centos 6 is ook al gepatched.
25-09-2014, 00:31 door Anoniem
Als ik het zo lees is het gevaar gebonden aan de werkwijze dat men de security heeft gekoppeld aan het kunnen uitvoeren van bepaalde commando-s. Die werkwijze is heeft de valkuil dat er als er maar op wat voor manier om die menu-gedachte heen te komen is, je alles kunt wat de user/key van het process mag.

Draait dat process onder root dan staat je systeem mogelijk open.
Draait dat process onder een key met ingeperkte rechten dan zal hij daar niet uitkomen (sandbox). Waarom worden de systemen niet volgens de sandbox architectuur gedachte beveiligd?
25-09-2014, 01:51 door Erik van Straten
Uit http://seclists.org/oss-sec/2014/q3/650 onder meer (opmaak toegevoegd door mij):
2014-09-24 17:03:19 +0200, door Florian Weimer: Bash supports exporting not just shell variables, but also shell functions to other bash instances, via the process environment to (indirect) child processes.
Current bash versions use an environment variable named by the function name, and a function definition starting with “() {” in the variable value to propagate function definitions through the environment.

The vulnerability occurs because bash does not stop after processing the function definition; it continues to parse and execute shell commands following the function definition. For example, an environment variable setting of

VAR=() { ignored; }; /bin/id

will execute /bin/id when the environment is imported into the bash process. (The process is in a slightly undefined state at this point. The PATH variable may not have been set up yet, and bash could crash after executing /bin/id, but the damage has already happened at this point.)

The fact that an environment variable with an arbitrary name can be used as a carrier for a malicious function definition containing trailing commands makes this vulnerability particularly severe; it enables network-based exploitation.


So far, HTTP requests to CGI scripts have been identified as the major attack vector.

A typical HTTP request looks like this:

GET /path?query-param-name=query-param-value HTTP/1.1
Host: www.example.com
Custom: custom-header-value

The CGI specification maps all parts to environment variables. With Apache httpd, the magic string “() {” can appear in these places:

* Host (“www.example.com”, as REMOTE_HOST)
* Header value (“custom-header-value”, as HTTP_CUSTOM in this example)
* Server protocol (“HTTP/1.1”, as SERVER_PROTOCOL)

The user name embedded in an Authorization header could be a vector as well, but the corresponding REMOTE_USER variable is only set if the user name corresponds to a known account according to the authentication configuration, and a configuration which accepts the magic string appears somewhat unlikely.

In addition, with other CGI implementations, the request method (“GET”), path (“/path”) and query string (“query-param-name=query-param-value”) may be vectors, and it is conceivable for “query-param-value” as well, and perhaps even “query-param-name”.

The other vector is OpenSSH, either through AcceptEnv variables, TERM or SSH_ORIGINAL_COMMAND.

Other vectors involving different environment variable set by additional programs are expected.
25-09-2014, 07:35 door Anoniem
Stel: ik heb geen CGI in Apache enabled en geen PHP (wel JSP), draai geen SSH remote toegankelijk => Hoe kwetsbaar ben ik dan voor deze remote exploit?
25-09-2014, 09:34 door Anoniem
lastig te zeggen, 'minder' vulnerable dan zij die dat wel doen. Maar als je ergens ook maar iets draait dat een shell spawnt (dhcp, een jsp pagina die iets met het fs doet, whatever) is de kans groot dat je alsnog vulnerable bent. Gewoon patchen dus.
25-09-2014, 10:01 door Anoniem
Ik heb de patch ook net uitgerold

Deze test lijkt te niet meer kwetsbaar na de patch:
env x='() { :;}; echo kwetsbaar' bash -c "echo dit is een test"

Uit deze test blijkt dat de kwetsbaarheid nog steeds bestaat:
env X='() { (a)=>\' bash -c "echo echo vuln"; [[ "$(cat echo)" == "vuln" ]] && echo "still vulnerable :("

Ik hoor dat de patch niet volledig de kwestbaarheid verhelpt. Weet iemand hoe dat zit?
25-09-2014, 10:43 door Anoniem
Het ljikt dat elk systeem dat ergen gebruikt kan maken van de shell in principe onveilig is. Niet heel nieuw.
https://owasp.org/index.php/Command_injection_in_Java
http://luctus.es/wp-content/uploads/2010/04/Webshells1.pdf
JSP kan net zoals PHP shell commando-s uitvoeren.

Er moet denk ik gekeken worden of het ook echt gebruikt wordt en kan worden.
SQL injection kennen we vanuit hetzelfde principe. Als je SQL open zet moet je niet vreemd gaan kijken als men ontdekt dat niet alleen jouw voorgebakken SQL uit te voeren valt. Om nu te zeggen dat SQL onveilig is en niet meer gebruikt moet worden is een te korte afsteek,
25-09-2014, 10:44 door Anoniem
Door Anoniem: lastig te zeggen, 'minder' vulnerable dan zij die dat wel doen. Maar als je ergens ook maar iets draait dat een shell spawnt (dhcp, een jsp pagina die iets met het fs doet, whatever) is de kans groot dat je alsnog vulnerable bent. Gewoon patchen dus.

Volgens mij zijn die zaken die je opnoemt een enorm risico als je dat uberhaupt extern beschikbaar maakt :D
Gewoon patchen heeft voor bedrijven best impact met +600 servers en die allemaal gereboot moeten worden.
Zeker als je kan aannemen dat je NIET remote exploitable bent.
Dan kan je er denk ik beter voor kiezen om het tijdens je reguliere patch window te doen - risico bepaling heet dat.
25-09-2014, 11:11 door Anoniem
Reboot is niet nodig na patchen.
25-09-2014, 12:04 door Anoniem
Door Anoniem: Ik heb de patch ook net uitgerold

Deze test lijkt te niet meer kwetsbaar na de patch:
env x='() { :;}; echo kwetsbaar' bash -c "echo dit is een test"

Uit deze test blijkt dat de kwetsbaarheid nog steeds bestaat:
env X='() { (a)=>\' bash -c "echo echo vuln"; [[ "$(cat echo)" == "vuln" ]] && echo "still vulnerable :("

Ik hoor dat de patch niet volledig de kwestbaarheid verhelpt. Weet iemand hoe dat zit?

Red Hat voerde een test uit en kwam erachter dat er een stuk meer kwetsbaar was dan ze verwachtten. Er verscheen vannacht al direct een patch, maar die blijkt het probleem onvoldoende te verhelpen. De patch levert een iets andere kwetsbaarheid op die momenteel wordt onderzocht. Red Hat omschrijft een work-around die admins in de tussentijd kunnen uitvoeren.

Source: http://computerworld.nl/beveiliging/83977-is-de-bashpocalypse-erger-dan-heartbleed
25-09-2014, 13:47 door Anoniem
Door Anoniem: Reboot is niet nodig na patchen.

weet je dat zeker? mysql of andere services die een bash spawnen hebben hier geen last van hoeven niet herstart te worden om de nieuwe bash te gebruiken?
25-09-2014, 13:54 door [Account Verwijderd] - Bijgewerkt: 25-09-2014, 13:59
[Verwijderd]
25-09-2014, 15:47 door Anoniem
Door Anoniem:
Door Anoniem: Reboot is niet nodig na patchen.

weet je dat zeker? mysql of andere services die een bash spawnen hebben hier geen last van hoeven niet herstart te worden om de nieuwe bash te gebruiken?

Het probleem is volgens mij het meegeven van een environment variabele aan een nieuwe bash instance die bijvoorbeeld
gestart wordt voor het uitvoeren van een script. Als je bash patcht dan geldt dat (i.t.t. hoe het bij Windows gaat) meteen
al voor alle nieuwe instances, de bestaande instances blijven doordraaien op de gedelete /bin/bash file tot de laatste
daarvan exit en dan wordt die file echt verwijderd.

Het kan zijn dat een proces een permanent child proces open heeft wat bash draait, maar dat is niet zo waarschijnlijk.
De enige situatie waarin dat normaalgesproken gebeurt is een interactieve shell die door login gestart is. Die geeft dan
geen andere inbraakmogelijkheden dan een dergelijke interactieve shell altijd al heeft.
25-09-2014, 16:33 door Anoniem
Door Anoniem:
Door Anoniem:
Door Anoniem: Reboot is niet nodig na patchen.

weet je dat zeker? mysql of andere services die een bash spawnen hebben hier geen last van hoeven niet herstart te worden om de nieuwe bash te gebruiken?

Het probleem is volgens mij het meegeven van een environment variabele aan een nieuwe bash instance die bijvoorbeeld
gestart wordt voor het uitvoeren van een script. Als je bash patcht dan geldt dat (i.t.t. hoe het bij Windows gaat) meteen
al voor alle nieuwe instances, de bestaande instances blijven doordraaien op de gedelete /bin/bash file tot de laatste
daarvan exit en dan wordt die file echt verwijderd.

Het kan zijn dat een proces een permanent child proces open heeft wat bash draait, maar dat is niet zo waarschijnlijk.
De enige situatie waarin dat normaalgesproken gebeurt is een interactieve shell die door login gestart is. Die geeft dan
geen andere inbraakmogelijkheden dan een dergelijke interactieve shell altijd al heeft.

Helder!
Dank voor de toelichting!
25-09-2014, 18:19 door ej__
Open een shell. Doe het testscript. Kwetsbaar.
Doe vanuit dezelfde shell yum update of apt-get update && apt-get upgrade.
Doe het testscript in dezelfde shell. Niet kwetsbaar.

Je hoeft niet te rebooten. Je hoeft de bestaande processen niet te sluiten. Getest op debian en op CentOS 6.5.
25-09-2014, 18:54 door Erik van Straten
Niet alleen voor Red Hat is de beveiligingsupdate incompleet, maar voor alle besturingssystemen met bash. Voor meer info zie mijn bijdrage in
https://www.security.nl/posting/403232/Ernstig+lek+in+Linux%2C+Mac+OS+X+en+Unix+ontdekt#posting403237.

Ik vind de stelling, dat rebooten voor geen enkel systeem nodig zou zijn, omdat iemand voor zijn specifieke distro, versie en configuratie en bovendien interactief heeft vastgesteld dat de bug verdwenen is na patchen zonder reboot, erg gevaarlijk.

Op z'n minst verwacht ik referenties naar als bekend staande Linux experts en duidelijk gespecificeerde versies en configuraties van toegepaste software. In plaats daarvan lees ik:
Door Anoniem: Het kan zijn dat een proces een permanent child proces open heeft wat bash draait, maar dat is niet zo waarschijnlijk.
Wat is "niet zo waarschijnlijk"? Weet jij wat ze in elke server distro aan cgi-bin performance tuning trucs hebben uitgehaald?
25-09-2014, 19:00 door ej__
Het is een uitspraak van Redhat. https://access.redhat.com/node/1200223.

Enne, misschien is het vandaag vaker en op meer systemen getest dan jij nu veronderstelt. Beetje kortzichtig, vind je ook niet?
25-09-2014, 22:36 door Anoniem
Door ej__: Open een shell. Doe het testscript. Kwetsbaar.
Doe vanuit dezelfde shell yum update of apt-get update && apt-get upgrade.
Doe het testscript in dezelfde shell. Niet kwetsbaar.

...ehhh... het testscript start een nieuwe shell!
die is geupdate dus niet kwetsbaar.

in dit geval maakt het niet uit omdat de exploit ook een nieuwe shell start, maar wat je zegt over "dezelfde shell"
dat klopt dus niet. Die is niet geupdate.
25-09-2014, 22:49 door Erik van Straten
Door ej__: Het is een uitspraak van Redhat. https://access.redhat.com/node/1200223.

Enne, misschien is het vandaag vaker en op meer systemen getest dan jij nu veronderstelt. Beetje kortzichtig, vind je ook niet?
Dat klinkt inderdaad als een betrouwbaar advies, voor Red Hat systemen in elk geval.

Dat dit niet zo voor de hand ligt blijkt wel uit het feit dat de FAQ in diezelfde pagina, die ik al sinds gisteravond in de gaten houd, vanochtend ("Updated 2014-09-25T07:00:12+00:00") nog vermeldde (zojuist gekopieerd uit http://webcache.googleusercontent.com/search?q=cache:sFcB24mprW0J:https://access.redhat.com/node/1200223%2B%22Red+Hat+has+been+made+aware+of+a+vulnerability+affecting+all+versions+of+the+bash+package%22&hl=en&gbv=1&filter=0&&ct=clnk):
Do I need to reboot or restart services after installing this update?

Yes, Please restart your system for using new bash package.
27-09-2014, 02:26 door Anoniem
ik heb arch linux en heb 2 keer een update gekregen voor bash, als ik de test draai, krijg ik het volgende


[robin@robin-laptop ~]$ env X='() { (a)=>\' bash -c "echo echo vuln"; [[ "$(cat echo)" == "vuln" ]] && echo "still vulnerable :("
echo vuln
cat: echo: No such file or directory
[robin@robin-laptop ~]$
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.