• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • Inicio
  • Auditoría
  • Eventos
  • Formación
  • General
  • Malware
  • Vulnerabilidades
  • Un blog de

Una al Día

Boletín de noticias de Seguridad Informática ofrecido por Hispasec

You are here: Home / Vulnerabilidades / Bash. Significa golpe, porrazo o castaña.

Bash. Significa golpe, porrazo o castaña.

25 septiembre, 2014 Por Hispasec 6 Comments

Sin lugar a dudas, una de las vulnerabilidades del año, con el permiso de lo que quede por llegar, va a ser esta que vamos a comentar. Su matrícula es CVE-2014-6271, un número que va a rebotar en la cabeza de los administradores durante bastantes meses. 
Resulta que bash, el intérprete de comandos más extendido en el mundo UNIX y derivados, tiene una curiosa y oscura funcionalidad que puede ser abusada hasta el punto de retorcerla y usarla para ejecutar código arbitrario en sistemas remotos.
Cuando lees una noticia así en una lista de seguridad te viene a la cabeza la imagen de Gandalf el Gris, detrás de ti, dándote golpecitos en la cabeza con su bastón mientras te grita «Parchea!!! Insensatooooooo«. No es para menos…
Veamos primero la funcionalidad, presente desde hace años en la misma página de manual de bash:

«Functions may be exported so that subshells automatically have them defined with the -f option to the export builtin. A function definition may be deleted using the -f option to the unset builtin«

Esto es un mecanismo similar a cuando exportamos variables definidas en un entorno hacia otro proceso.
Vamos a probar la funcionalidad de manera básica:
Primero creamos una función en el intérprete
$function test { echo “hola”;}
Ahora le decimos a bash que la exporte:
$ export –f test
Creamos un nuevo interprete…
$ bash
…y llamamos a la función que acabamos de exportar:
$ test
hola
¿Dónde está el problema?
En el mecanismo que hace de exportación de esa función, la forma en la que lo hace y como interpreta el código que se inyecta en el entorno donde es exportada.
Para conseguir esa exportación de funciones bash recurre a un pequeño «truco«. No exporta la función en sí, sino en una variable de entorno donde se interpreta su valor como el cuerpo de una función. Vamos a verlo modificando el ejemplo anterior, en vez de una función vamos a crear una variable de entorno:
$ test=’() {echo “hola”;}’
Exportamos, no una función sino una variable que es lo que haría el intérprete:
$ export test
Ahora creamos un intérprete y volvemos a invocar nuestra función ‘test‘:
$ bash
$ test
hola
Curioso, ¿verdad?.
Bueno, pues cuando el entorno recibe esta variable y el interprete detecta la siguiente cadena ‘() {‘ entiende que está ante una función y comienza a interpretar su código. El problema y aquí entramos en la zona peligrosa, es que no para de interpretar cuando termina el cuerpo de la función y continua ejecutando el código que viene detrás del cuerpo.
Por ejemplo, si el intérprete tiene la siguiente variable-función exportada con código más allá de la definición de la función:
’(){ echo “hola”; }; /bin/ls’
Terminará ejecutando el ‘/bin/ls’ cuando se esté interpretando esa cadena. No hará falta invocar la función, justo cuando el interprete procese las cadenas detrás del cuerpo de la función ejecutará el comando. Idealmente, debería de terminar justo cuando encuentre el ‘};’ correspondiente pero inexplicablemente no lo hace y peor aun ejecuta directamente ese código anexado al cuerpo de la función.
¿Por qué es peligroso?
Son muchísimos los vectores. Las variables de entorno y los intérpretes de comandos son exportados y creados en infinidad de situaciones. El peligro real, es cuando un proceso remoto acepta cadenas de entrada y hace uso de ellas a través de variables de entorno. Ahí es donde se puede inyectar una variable que contenga la cadena ‘(){‘ seguida de código arbitrario, comandos que terminarán siendo ejecutados por el proceso.
El ejemplo, ya canónico y que posiblemente veamos estampado en alguna camiseta, es la mínima expresión de definición de una función en bash ”() { :;};”
Es fácil interpretarlo, el bloque de la función definida contiene el carácter ‘:’ que en bash no hace nada, simplemente devolver cero. Su correspondiente en C sería un “return 0;”. A esa cadena por supuesto se le puede adosar cualquier comando, desde un ‘echo «yo estuve aquí» hasta un devastador «rm –Rf» o un «curl****/mi_shell.php» para depositarla en «/var/www/».
En la lista oss-security, donde se dio a conocer públicamente el problema, exponen un escenario que caracteriza el empleo de este ataque. Supongamos un script CGI que procesa las cabeceras HTTP mapeando su clave, valor a variables de entorno. No cuesta imaginar que sucede a partir de aquí. En el momento que se reciba una petición HTTP con una cabecera «cocinada» sería posible que dicho sistema termine ejecutando los comandos que se inyecten desde el exterior.
¿Quién la ha descubierto?
Su nombre es Stephane Chazelas. Francés apasionado del mundo UNIX, Chazelas no es un nombre muy conocido, hasta ahora, en la comunidad de seguridad. No se saben los detalles de cómo llegó hasta la vulnerabilidad, pero es bastante posible que gracias a sus profundos conocimientos de cómo funcionan las entrañas del sistema le proporcionará la óptica necesaria para ver aquello que otros no vieron.
Chazelas apostó por informar sobre su hallazgo a las vías adecuadas para que el problema fuese corregido antes de ser anunciado,  aunque casi al final se filtró por algún medio y se precipitó la publicación de detalles y parches.
Una reflexión
Si hacemos un repaso de las últimas vulnerabilidades podríamos ver desde cierta perspectiva que un buen grupo de ellas ya no se asientan sobre desbordamientos de memoria u otras, llamémoslas vulnerabilidades clásicas. Este tipo de errores tira más al fondo, a la lógica del diseño, un territorio donde los fuzzers comienzan a dejar de ser eficaces (no dejarán de serlo completamente) y se confía más en una comprensión del problema que solo te puede proporcionar la experiencia y la capacidad de conectar los vértices que componen la figura final.
Este tipo de errores siempre han existido y el otro tipo, los provocados por funcionalidades achacables a ciertos lenguajes (sí, C y C++, vosotros dos) no van a dejar de dar quebraderos de cabeza. Pero los problemas que derivan de un diseño inadecuado… ¿Qué IDS está preparado para ello? Quizás pueda parar una cadena pasada por Shikata Ga Nai ochocientas veces pero ¿Cómo paras una cabecera HTTP que contiene una definición de una función que va a ser exportada y de paso ejecutado el código que viene detrás? ¿Y la funcionalidad heartbeat de OpenSSL? No hay un detector de diseños defectuosos, no lo habrá nunca. Jamás.
Más información
remote code execution through bash
http://www.openwall.com/lists/oss-security/2014/09/24/11
Bash specially-crafted environment variables code injection attack
https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/
David García
dgarcia@hispasec.com
Twitter: @dgn1729

 

Compártelo:

  • Twitter
  • Facebook
  • LinkedIn
  • Reddit
  • Telegram
  • WhatsApp

Publicaciones relacionadas

Filed Under: Vulnerabilidades

Reader Interactions

Comments

  1. Anónimo says

    25 septiembre, 2014 at 3:18 pm

    ¿El vector es vulnerable si en las variables no se utiliza bash como shell? OpenBSD no lo instala por defecto.

    Responder
  2. Anónimo says

    25 septiembre, 2014 at 3:50 pm

    Según leí están afectados otros interpretres como zsh, csh…

    Responder
  3. Johann Paul Echavarria Zapata says

    26 septiembre, 2014 at 5:05 pm

    Excelente explicación. Artículos como este son lo que más me gusta de Una-al-día. Con código que permite hacer pruebas de concepto. Ya mando a hacer la camiseta con () { :;};
    🙂

    Responder
  4. Marvin Gerardo Jimenez Mora says

    26 septiembre, 2014 at 5:45 pm

    Hola. Pregunto Linux en el fondo es Unix? se puede ver afectado ?
    Saludos.

    Responder
  5. JeRo MC says

    26 septiembre, 2014 at 7:35 pm

    Mejor explicado, no puede ser.

    Responder
  6. Anónimo says

    30 septiembre, 2014 at 12:06 pm

    eh coherente

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Primary Sidebar

Buscador

Email Newsletter

Suscríbase y reciba Una al Día en su correo.

UADCAST

Populares de UAD

  • FedexBanker: El nuevo troyano bancario para Android que utiliza tus paquetes para robarte las credenciales
  • Nuevo 0-day en Google Chrome
  • Dos nuevos fallos críticos en Zoom permiten hackear los dispositivos de los usuarios
  • Un bug permite "romper" el WhatsApp de todos los miembros de un grupo
  • Ruffle, emulador para Flash Player

Entradas recientes

  • Nuevo 0-day en Google Chrome
  • FedexBanker: El nuevo troyano bancario para Android que utiliza tus paquetes para robarte las credenciales
  • Descubiertos varios exploits «in-the-wild» basados en Spectre
  • Gootkit RAT utiliza SEO para distribuir malware
  • Descubiertas nuevas versiones del troyano bancario EventBot
  • Liberados parches de seguridad de Cisco que corrigen vulnerabilidades críticas y altas en varios de sus productos
  • Vulnerabilidad crítica encontrada en vCenter de VMWare
  • Correo electrónico
  • Facebook
  • LinkedIn
  • RSS
  • Twitter

Footer

Una al Día

Una-al-día nació a raíz de un inocente comentario en un canal IRC hace casi 19 años. A través de los archivos, un lector curioso puede ver cómo ha cambiado (o no) la seguridad de la información desde entonces.

Entradas recientes

  • Nuevo 0-day en Google Chrome
  • FedexBanker: El nuevo troyano bancario para Android que utiliza tus paquetes para robarte las credenciales
  • Descubiertos varios exploits «in-the-wild» basados en Spectre
  • Gootkit RAT utiliza SEO para distribuir malware
  • Descubiertas nuevas versiones del troyano bancario EventBot

Etiquetas

#bugbounty #ddos #sphinx 0-day 0-zay 0day 0v1ru$ 2FA 4g 5g 10kblaze 888 RAT accellion account hijack ace acrobat acrobat reader actualizacion Actualización actualizar adb address bar AdMaxim Adobe Adobe Bridge Adware Afeter Effects Agencia Tributaria agoda Agora Alemania Alexa Alien Aliznet alphabet Amadeus Amazingco Amazon amd among us Anatova Andr/Xgen2-CY Android Android lowcost androMut AngryPolarBearBug2 anonymous antivirus anubis any.run apache api apk app Apple Apple CVE Apple exploit apps APT apt-c-23 apt39 APT41 apt framework Aptoide apuestas archive_tar arp asp asus ata ataque Atlantis ATP attack Audio Australia autenticación Authentication bypass autodesk avaddon avira azure backdoor Baltimore ban bancario bancos bandook bank banker barcode scanner barra navegacion base de datos BBC BGP BIG-IP bill gates binary defense binaryedge bing biometrica biometría bios bird bitbucket bitcoin bitdefender blackhat bladabindi BLE bleedingtooth BLESA blink blockchain bluekeep blueleaks Bluetooth Bluetooth Low Energy bluez boca bof boletín booking bootstrap-sass borrado bot botnet bots Bot Tegram Brave breach brecha Brikerbot british airways bruteforce BSD bsides buffer overflow Bug Bug bounty bugbounty Bulgaria bypass C&C c2 C2C camaras seguridad cambridge camera Campaign canada cannabis canon capcom car carbanak carding ccleaner cctv CDN cd projekt CDRThief cem censura centurylink cerberus Certifados certificacion Certificates challenge Checkers checkpoint Check Point China chingari Chrome chromium CI Ciberataque Cibercrimen cibercriminal ciber delincuentes ciberdelincuentes ciberespionaje ciberguerra ciberseguridad cifrado cinnamon CISA Cisco Citrix clave privada cloud CloudCMS cloudfare cmd cms cng.sys code execution CoderWare coinhive ColdFusion comrat conferencia confidencial congreso congresos conti contraseñas Cookies copy-on-write Corea del Norte coronavirus covid Covid19 cow cpu Crack Credential-Stuffing CriptoCert criptografía criptomoneda Criptomonedas criptored critical Cross-Site Request Forgery CrowdStrike crypt32 cryptojacking Cryptolocker cryptominado cryptomonedas críticas CSP CSRF ctf customer support cve CVE-202-6109 CVE-2015-4670 CVE-2017-0199 CVE-2019-1619 CVE-2019-1620 CVE-2019-2633 CVE-2019-2638 CVE-2019-2725 CVE-2019-3719 CVE-2019-5096 CVE-2019-5544 CVE-2019-7838 CVE-2019-7839 CVE-2019-7840 CVE-2019-7845 CVE-2019-7850 CVE-2019-11043 CVE-2019-11510 CVE-2019-11707 CVE-2019-11932 CVE-2019-12268 CVE-2019-12592 cve-2019-12815 CVE-2019-12922 CVE-2019-14287 CVE-2019-14899 CVE-2019-15126 CVE-2019-15295 CVE-2019-15316 CVE-2019-16928 cve-2019-19519 cve-2019-19520 cve-2019-19521 CVE-2019-19522 CVE-2019-19639 CVE-2019-19743 CVE-2019-19781 CVE-2019–11396 CVE-2020-0601 CVE-2020-0796 CVE-2020-0915 CVE-2020-0916 CVE-2020-0986 cve-2020-13-50 CVE-2020-724 CVE-2020-1206 cve-2020-1530 cve-2020-1537 CVE-2020-2765 CVE-2020-3142 CVE-2020-3566 CVE-2020-3764 CVE-2020-3952 CVE-2020-3953 CVE-2020-3954 CVE-2020-3956 CVE-2020-6008 CVE-2020-6009 CVE-2020-6010 CVE-2020-6110 CVE-2020-7473 CVE-2020-7961 CVE-2020-8419 CVE-2020-8420\ CVE-2020-8421 cve-2020-8982 CVE-2020-8983 CVE-2020-10148 CVE-2020-11511 CVE-2020-11651 CVE-2020-12351 CVE-2020-12352 CVE-2020-14750 CVE-2020-15466 CVE-2020-25212 CVE-2020-25645 CVE-2020-28188 cve-2020-29491 cve-2020-29492 CVE-2021-1051 CVE-2021-3007 CVE-2021-3156 cvss CyberArk cyberataque cyberattack cyberpunk cyberpunk 2077 cylance CyrusOne código arbitrario D-Link Dark Halo DarkHotel darkirc dark markets darknet darkside darkweb dark web darpa DART Database data breach Data Center Network Manager data leak dataspii DB DCNM ddos ddosecrets Debian decrypter deepfake deep web defacement defcon defender defiant Dell Dell System Detect dell wyse demanda denegacion de servicio Denegación de servicio Denial of Service dependencias dereferencing devfest DHS digilocker digitalocean DigitalRevolution directory traversal disclosure discord Dispositivos IoT django Django Rest Framework DJI DNS DNS over HTTPS docker dockerhub dogecoin DoH doki dolphin dolphinattack donald trump Doogee BL7000 doorbell dos DoubleGun downgrade DrayTek drivers droga dropper drupal duplicado SIM duplicator DVMRP E-Business e-learning EA echobot ecommerce ecsc EDA Edge EEUU egregor ejecución de código ejecución de código arbitrario ekans ElasticSearch elecciones electronica elevacion de privilegios Elevación de privilegios elon musk emotet empire enisa ergegor eris loris error escalada escalada de privilegios ESET ESNI españa estados unidos Estafa esteganografia eternalblue Europa europol eventbot evento eventos Evernote Evernote Web Clipper evilcorp evilgnome Evilnum EvilQuest excel exim Experience Manager exploit extension extorsión exxpedia F5 faceapp Facebook Facebook leaks Facebook Messenger FakeSpy fallos fallout fancy bear Fast Flux fbi fedex fifa20 Filtración filtración de datos fingerprint finspy Firebase FireEye firefox Firefox Private Network Firefox Test Pilot Firewall firma digital flash Flash Player FlawedAmmy flipboard foreshadow formacion Forminator foros FOSSA fotos foxit pdf fpga Framemaker framework fraud Fraude FreakOut FSB fta ftc FTP fuerza bruta Fuga de información Fusion gadget GandCrab garmin gdg gdpr gehealtcare gem GHIDRA gif git github gmail GnuPG go GoAhead godaddy golang goldbrute goldenspy goo Google Google Analytics google app engine google chrome Google Docs Google Hangouts google nest google play googleplay Google Titan gootkit gosms gosmspro goznym gpu Grandoreiro grandstream graph great firewall gsm guacamole guildma hack hackeo hacker hacking hacktivist hardware hash Heap Overflow Heartbleed HEVC hiberus Hijacking hisilicon hispasec historia honda hospital hostinger hotelbeds hoteles hotels http httpd HTTPS huawei Hyper-V hyperv iBaby iBaby Monitor M6S IBM ICAR iCloud ico ie IGMP ilegal iLnkP2P iMessage impresoras india infection infinite loop Infiniti NCAR infosec injection innerSloth insider instagram intel intelligence Internet Explorer intezer labs in the wild Investigación Inyeción SQL IOC iomega iOS IOS XR iot iPad ipados iPhone iPod ipp iran isp Italia iterm2 ITG18 jabber jailbreak java javascript Jenkis JMT Trader joker joomla joomla! jquery js kaiji Karkoff karpersky kaspersky kde kde plasma Keecoo P11 keepass kernel Kernel Linux keyless keylogger kill-switch kindle Koodous Kr00k krebsonsecurity kubeflow kubernete kubernetes la 9 las vegas latinoamerica Lazarus leak Leaks LearnDash LearnPress lenovo Let'sEncrypt ley lfi LG libgcrypt libreoffice libssh licencias LifterLMS Line LinkedIn Linknat linux linux kernel linux mint liquid LMS loader lockbit logitech longwatch lookout lte luisiana Lukas Stefanko lxc M-Horse Pure 1 m1 Maas mac machete MacOS mac os macros magecart magento Mail malaga malspam malvertising malware malware macos apple Manipulación de ficheros market martes martes de parches marzo masmovil masslogger MATA matrix maze mdm mds Media Encoder Media File Jacking MediaTek medicina meldown meltdown MEMS menor mensajería instantánea meow MessageTap messenger metasploit Mi Browser Microsoft Microsoft Edge microsoft excel Microsoft Teams Microsoft Word mijia mikrotik minero mining Mint Browser mirai mit mitre mitron mobileiron modsecurity mod_copy monero MongoDB monitor Moodle MosaicRegressos Motorola mousejack Mozart Mozilla MQTT MSTIC ms word mukashi mySQL móvil NAC Nagios NanocoreRAT nas Navegador Tor nbip nca Nessus netcat Netgear Netlab360 netwalker NetWeaver NeverQuest nginx Nintendo nissan Nissan ASIST NjRAT Nnissan connect things node nordvpn NOTROBIN npm nsa NSACrypt NVIDIA ObjectInjection Obsolescencia programada oceanlotus OFAC Office office 365 oilrig okcupid omnibees omnirat OneDrive onion ONO ONTSI OpenBSD OpenOffice opensouthcode OpenSSH OpenSSL openSuSE openwrt Opera opsec Oracle origin orion oscomerce oscorp osi OS X OTRS outlok Outlook overflow owasp p30 package manager pakistan Paloalto parche parches password password checkup Passwords paswords Patch Tuesday path transversal Path Traversal patrón Payday paypal pdf pear pegasus pewdiepie PhantomNet Pharming Phishing phising Photoshop PHP php-fpm phpmyadmin Picreel piercer pila bluetooth PirateMatryoshka Pixel Play Store plugin Plugins plutotv Poc pod policia policykit policía polkit porn portabilidad PoS PostgreSQL powershell ppp Predator the Thief prensa Privacidad privacy privadas privesc privilege escalation privilegios ProCC ProffPoint proftpd Project Zero Promethium prosegur proxy prueba de concepto psg PsiXBot ptp puerto rico Pulse Secure pulsesecure putty pwn Pwn2Own PyRAT python python3 python 3.8.0 PyVil Qakbot Qbot QNAP QSnatch qualcomm QuickTime quora raas ragnar ragnar locker Ramsay Healt Care RAM scraping ramsonware rana rankmatch ransom ransomware rapid7 RAT RATs ratsnif razer rce rconfig rdp RDS realtek recaptcha reconocimiento facial red.es redes Red Hat red team relay Release relleno de contraseñas remote remote code execution Reporte retpoline retrohuinting revelación de información sensible RevengeHotels RevengeRAT reversing reversinglabs REvil Revocation ReVoLTE Rich Mirch rick-rolling rick astley ridl ring riot robo datos robo de cuenta robo de información root Rooted router routeros RTL8195A ruby RubyGems ruffle rumania Rusia rust rutas ryuk sack panic safari safe mode safety detective salto de restricciones saltstack SAML samsung sandbox SandboxEscaper Sangfor sap scam screensaver Secuestro SIM security security bypass Security Discovery Security Patch security update segmentation fault seguridad seguridad física selinux seo server servidor web sextorción sextorsion sha-1 ShadowPad SHAREit SHAttered Shell ShinyHunters shodan side-channel sigred Silence Silex Silkkitie sim SIM Swapping simswapping siri sistema interno Site Isolation skills skimming skype slack Smanager Smartbuilding Smartphone smartwa Smartwatch smb SMBGhost SMBleed smbv3 smishing sms SMTPD snake snapd Snatch SNI sodin Sodinokibi software libre solar Solarwinds Solorigate sonicwall sop sophos source code SourceFourge spam Spearphone spectre speculative spoofing spotify Spy spyware SQL SQL injection Squid ssh ssid ssl ssltrip ssrf stack overflow Stanislav steal stealer steam stop ransomware strandhogg strongpity studio code sudo Sudo apple suecia Sumbrust supercomputador SupportAssist surfingattack symantec symbotic SymCrypt sysinternals SysTech ta505 takeover talleres tarjetas Tarjetas de crédito tchap TCP/IP tcp sack teclado tecnología Telecom Telegram teletrabajo tenyearchallenge tesla tesoro The Community the great suspender ThemeGrill The North Face the witcher 3 thin client ThinOS Thoth thunderbird Thunderbolt ThunderSpy Tianfu Cup ticketmaster tik tok tiktok timbre timing attack Titan M Titan Security Key tls TMUI tmux Tokopedia tomcat tonedeaf tool TOR Tor Browser torbrowser Torisma torpedo TP-Link TraceTogether Trassion Treck Triada trickbot trojan TroubleGrabber troyano TrueBot trusteer rapport turlaapt tvOS twiiter Twitter typosquatting uad uad360 uad360 congreso malaga uam uber ubuntu UEFI ultrasonido uma unaalmes unauthorized access UNC Under the Breach unifying universidad unix Update updates url ursniff use-after-free user-after-free v8 valorant valuevault valve vault 7 vbulletin vcenter server VictoryGate videocamaras videoportero videos vietnam vim virus virustotal visa vishing Visual Studio VKworld Mix Plus vlc vmware VMware Cloud Foundation VMware ESXi vnc voice assistants voip VOS2009 VOS3000 voto vpn vt vulnera vulnerabilidad vulnerabilidades vulnerability Wacom waf wallet Wall Street Market wastedlocker watchOS wav web WebArx WebEx Weblogic Webmin webrtc web share api wechat welcart WhatsApp Wifi Win32k Windows Windows 10 windows defender windows phone Winnti winrar Wireshark wordfence WordPress WordpressTerror Workstation wpa2 wpa3 wroba wyze X.509 XCode xenmobile Xhelper xiaomi XML xmpp xmr XMRig xnu xor ddos XORpass xploit XSS xssi Yellow Pencil Yves Rocher zaeroday zdnet zendesk Zero-Day zero click zero day zerodium zeus zombieload ZoneAlarm zoom zyxel

Copyright © 2021 · Hispasec