Los terminales VT100 (que todos los emuladores de terminales modernos emulan en cierta medida) admitían una serie de comandos problemáticos, pero los emuladores o distribuciones modernos desactivan los más problemáticos y los menos útiles. Aquí hay una lista no exhaustiva de secuencias de escape potencialmente riesgosas (sin incluir las que simplemente hacen que la pantalla sea ilegible de alguna manera):
- Los comandos arbitrarios del archivo de registro en rxvt y Eterm informados por HD Moore . De hecho, estos son errores importantes, afortunadamente corregidos durante mucho tiempo.
- El comando de respuesta, también conocido como Estado del terminal de retorno, invocado por
ENQ
( Ctrl+E
). Esto inserta texto en el terminal como si el usuario lo hubiera escrito. Sin embargo, este texto no está bajo el control del atacante: es el nombre del terminal, típicamente algo así como xterm
o screen
. En mi sistema (compresión de Debian), xterm devuelve la cadena vacía por defecto (esto es controlado por el answerbackString
recurso).
- Los comandos Enviar atributos del dispositivo
ESC [ c
y amigos. El terminal responde con ESC [ … c
(donde …
pueden contener dígitos y signos de puntuación ASCII solamente). Esta es una forma de consultar algunas capacidades del terminal, en su mayoría obsoletas, pero tal vez utilizadas por aplicaciones antiguas. Nuevamente, la respuesta del terminal es indistinguible de la entrada del usuario, pero no está bajo el control del atacante. La secuencia de control puede parecer una tecla de función, pero solo si el usuario tiene una configuración inusual (ninguna de las configuraciones habituales que he encontrado tiene una secuencia de escape de tecla de función válida que es un prefijo de la respuesta del terminal).
- Las diversas funciones de control del dispositivo (DCS escapa, empezando por
ESC P
).
- No sé qué daño se puede hacer mediante
DECUDK
(establecer claves definidas por el usuario) en un emulador de terminal típico.
DECRQSS
(Solicitar cadena de estado) es otro comando al que el terminal responde con una secuencia de escape, esta vez comenzando con \eP
; Esto puede ser problemático ya que \eP
es una clave válida ( Alt+ Shift+ P).
- Xterm tiene dos características experimentales más:
ESC P + p …
y ESC P + q …
, para obtener y establecer cadenas termcap. De la descripción, esto podría usarse al menos para modificar el efecto de las teclas de función.
- Varios comandos de informe de estado:
ESC [ … n
(Informe de estado del dispositivo). El terminal responde con una secuencia de escape. La mayoría de estas secuencias de escape no corresponden a secuencias de escape de teclas de función. Uno parece problemático: el informe ESC [ 6 n
es de la forma donde y son secuencias de dígitos, y esto podría verse con algunos modificadores.ESC [ x ; y R
x
y
F3
- Comandos de manipulación de ventanas
ESC [ … t
.
- Algunos de estos permiten cambiar el tamaño de la ventana xterm, iconificarla, etc., lo cual es perjudicial.
- Algunos de estos hacen que el terminal responda con una secuencia de escape. La mayoría de estas secuencias de escape parecen de bajo riesgo, sin embargo, hay dos comandos peligrosos: las respuestas
ESC [ 2 0 t
e ESC [ 2 1 t
incluyen la etiqueta y el título del icono de la ventana de terminal, respectivamente, y el atacante puede elegirlos.
- Al menos bajo compresión de Debian, xterm ignora estos comandos por defecto; pueden habilitarse configurando el
allowWindowOps
recurso o selectivamente a través del disallowedWindowOps
recurso. Gnome-terminal en Ubuntu 10.04 implementa incluso las respuestas de título por defecto. No he comprobado otros terminales o versiones.
- Comandos para configurar el título del terminal o el nombre del icono. Bajo xterm y la mayoría de los otros terminales X, están . Debajo de la pantalla, la secuencia de escape es . Encuentro la preocupación sobre estos comandos sobrevalorada. Si bien permiten cierta cantidad de travesuras, cualquier página web tiene el mismo problema. Actuar en una ventana basada únicamente en su título y no en su clase es similar a abrir un archivo cuyo nombre le fue dado por una parte que no es de confianza, o no citar una expansión variable en un script de shell o dar palmaditas en la nariz a un perro rabioso - No te quejes si te muerden.
ESC ] digit ; title ESC \
ESC k title ESC \
Encuentro la respuesta de Varnish falsa. Se siente como si estuviera tratando de cambiar la culpa, o en el modo nazi de seguridad (cualquier preocupación de seguridad, genuina o no, justifica una característica de blackball).
La sabiduría de los escapes de respuesta terminal en general se ha cuestionado a intervalos regulares, pero ninguno de los principales programas de emulación de terminal ha considerado adecuado descartar estas secuencias, probablemente en un intento equivocado de compatibilidad con la tecnología de 1970 ya no utilizada. (...)
En lugar de culpar a todos y cada uno de los programas que escriben archivos de registro, sería mucho más productivo, desde el punto de vista de la seguridad, lograr que los programas de emulación de terminal dejen de hacer cosas estúpidas y, de este modo, solucionen este y otros problemas de seguridad una vez y para todos.
Muchas de las respuestas son características útiles: una aplicación necesita saber cosas como la posición del cursor y el tamaño de la ventana. Establecer el título de la ventana también es muy útil. Sería posible confiar completamente en las ioctl
llamadas para estos, sin embargo, esto habría requerido un código y utilidades adicionales para realizar estas ioctl
llamadas y realizar transacciones en texto de estilo unix que pasa los descriptores de archivo. Cambiar estas interfaces ahora sería mucho trabajo, por poco beneficio.
Se supone que los archivos de texto no contienen caracteres que no se imprimen, como los caracteres de control. Generalmente se espera que los archivos de registro sean archivos de texto. Los archivos de registro no deben contener caracteres de control.
Si usted está preocupado de que un archivo puede contener secuencias de escape, abrirlo en un editor, o verlo con less
y sin el -r
o -R
la opción, o ver a través cat -v
.