Estoy ejecutando un escáner de seguridad contra una aplicación que estoy desarrollando y está aumentando la alerta roja, el hilo de máxima seguridad para el gem rotr que usa en su fuente Gemfile con el protocolo HTTP que revela una posibilidad para el ataque del hombre en el medio que potencialmente puede permitir un atacante para inyectar cualquier código en una aplicación
El enlace a Gemfile en cuestión: https://github.com/mdp/rotp/blob/master/Gemfile
Afirma:
source 'http://rubygems.org'¿Es un problema real si esta gema aparece como una dependencia y en mi Gemfile estoy usando:
source 'https://rubygems.org'Traté de averiguar cómo funciona exactamente, pero no pude.
Es decir, de qué manera está funcionando el paquete:
Obtiene todas las gemas que especifico de http s ://rubygems.org, luego extrae todas las dependencias por separado para cada gema, de la fuente especificada en cada Gemfile (para cada gema) y en caso de gema rota, las extrae de http:/ /rubygems.org (NO https) - abriendo así la posibilidad teórica de un ataque man in the middle al instalar ropt gem
Bundler extrae todas las gemas de la fuente especificada en MI Gemfile (http s ://rubygems.org), por lo que incluso si una gema especifica http://rubygems.org (NO https), se extraerá a través del protocolo seguro desde el ubicación que especifico por lo que no hay posibilidad teórica para el hombre en el ataque medio
En su ejemplo, la gema se cargaría a través de HTTPS, porque el Gemfile de una dependencia no se cargará en absoluto. A partir de las dependencias, Bundler solo evalúa el archivo gemspec . El Gemfile de la gema solo se usa durante el desarrollo de esa gema. Lectura interesante en este contexto: cómo el empaquetador prioriza las fuentes .
Lo siguiente para el lector interesado por qué es importante usar HTTPS al descargar gemas:
Cuando carga una gema desde una fuente que no es HTTPS y hay un atacante intermediario, este atacante podría devolverle cualquier cosa en lugar de la gema que solicitó.
Por supuesto, hay hombres si y cuándo . Pero imaginemos que va a descargar una gema en un canal de comunicación no seguro como HTTP puro. E imaginemos que hay un atacante man-in-the-middle que es capaz de olfatear su tráfico. Esto podría ser posible cuando se usa el mismo WiFi en una cafetería u hotel, o cuando hay diferentes clientes en servidores virtuales en un centro de datos o tienen acceso físico a su teléfono fijo.
Debido a que pueden leer su solicitud sin cifrar de una gema, entonces saben qué gemas está usando. Ahora imagine que no solo detectan su tráfico, sino que también manipulan la respuesta de los servidores hacia usted. Cuando, por ejemplo, solicita una nueva versión de una gema popular para manejar la autenticación y autorización de usuarios o pagos, podrían devolverle su versión en lugar de la versión original.
Y su versión podría incluir algunos cambios menores como:
ENV y/o Rails.credentials y cargarlas en un servidor controlado por el atacante. Esto ciertamente le daría al atacante todas las contraseñas de su aplicación.ENV o Rails.credentials , eso significa que también podría cambiarlas. Por ejemplo, conectarse a otro proveedor de pago significaría que el pago de su cliente se redirigiría a una cuenta diferente.tl;dr Cuando un atacante puede realizar un ataque de intermediario, puede enviarle versiones maliciosas de una gema. Estas gemas maliciosas podrían hacer casi todo lo que puedas imaginar con tu aplicación. Claro, los ataques como este no son simples, pero tampoco son superdifíciles.
La regla general es: siempre use HTTPS siempre que sea posible (no solo para descargar gemas sino para todo el tráfico de la red).