Para determinar definitivamente el grado en que esto podría o no ser "un paso prudente", creo que tendría que hacer una investigación de seguridad original sobre los posibles reemplazos, que incluyen:
- El guión de Debian
- ksh de OpenBSD
- ceniza de Busybox
- MirBSD / MirOS mksh
- ... y ciertamente otros
La respuesta de Mark sugiere que al menos OpenBSD ya ha recibido un escrutinio de seguridad, pero no estoy seguro de la extensión o si existe evidencia que respalde esto (claramente, no aplicaron ningún escrutinio a una piedra angular de la seguridad de las comunicaciones (OpenSSL ) hasta hace poco, cuando lo bifurcaron en LibreSSL). Por otro lado, para mí es bastante claro que nadie se había molestado en leer la fuente de seguridad de Bash hasta hace poco, o que se habría descubierto un "proyectil" hace mucho tiempo; Todo lo relacionado con la "función de importación" es una gran señal de advertencia que cualquier investigador de seguridad analizaría tan pronto como lo viera (y con suerte recomendaría la función completa para su eliminación). Pero para los demás, no es tan claro.
Lo que está claro, sin embargo, es que todo lo anterior tiene una superficie de ataque mucho más pequeña que Bash. Para que un atacante tome el control de un programa, tiene que haber algún canal de entrada. Por supuesto, estas pueden ser cosas no obvias como límites de recursos, reloj del sistema, etc., pero aún son entradas; un programa sin absolutamente ninguna entrada es trivialmente no vulnerable. El error de diseño de seguridad en Bash es que está tomando entradas no confiables (los contenidos de variables de entorno arbitrarias) y las somete a un procesamiento complicado (análisis como código). Por otro lado, que yo sepa, ninguno de los shells listados arriba realiza ningún procesamiento del contenido de las variables de entorno (excepto las individuales con un significado establecido específico como LANG
y LC_*
, ENV
, IFS
, PATH
, PS1
, etc.) u otra entrada; simplemente tratan los contenidos como datos abstractos que se pasan.
Desde el punto de vista del diseño de seguridad, incluso sin auditar estas alternativas, estimaría que son opciones más seguras que Bash. Si eso seguirá siendo el caso no está claro. Ciertamente, Bash está recibiendo mucha atención en este momento, y es menos probable que otros shells reciban, por lo que podríamos terminar con la mayoría de los problemas en Bash, mientras que los problemas en otros shells siguen siendo desconocidos. Entonces tiene varios factores a considerar, como si es probable que sea un objetivo individual, en cuyo caso el uso de software menos convencional puede ser una responsabilidad.
Personalmente, uso Busybox ash en la mayoría de los lugares. Si nada más, tanto ash como dash usan aproximadamente 1/5 de la memoria de bash y comienzan de 2 a 8 veces más rápido, por lo que también son opciones muy prácticas desde un punto de vista no de seguridad.