domingo, 16 de enero de 2011

El peligro de importar código...

... cuando no sabemos que rehusamos. Hoy al entrar nuevamente en un foro que frecuentaba hace tiempo, de un juego para navegador, me encontré con unos "problemas" que habían surgido a raíz de esto mismo. El usar códigos de terceros sin control alguno puede pasar factura.

En este caso hablo de Scripts para Greasemonkey, una extensión de Firefox que permite, mediante ligeras o complejas lineas, modificar en tiempo real el contenido de una pagina. Para ello usa el lenguaje Javascript, aunque esto es algo que a fin de cuentas nos la sopla en esta entrada. (el saber no ocupa lugar, pero el texto para expresarlo si coponcio!)

Bien, en la mayoría de lenguajes de programación existe una forma u otra de integrar un código externo sin necesidad de copiarlo íntegramente, lo cual es muy cómodo siempre y cuando se sepa con seguridad el contenido de dicho código... Pero, que ocurre cuando no tenemos control sobre el contenido del mismo y el autor original se toma una dosis superior a la habitual? Para ilustrarlo, nada mejor que un rellenolineassinsentido ejemplo ^^.

Como se que la mayoría de los que leerán este blog sois unos incultos de narices tienen nulos/escasos o pocos conocimientos de la materia, simplificaré al máximo su contenido... A fin de cuentas hago lo que me salga de ahí no? Ademas, estoy seguro de que si pongo "el código de la muerte", no faltaran scriptkiddies (o proyectos a juankers) que intentaran usarlo a fin de "putear al prójimo", y ya sabéis que no es mi estilo.

Pongamos el primer ejemplo de código ajeno:

1 primera linea de codigoajeno
2 segunda linea de codigoajeno
3 tercera linea de codigoajeno
_______________________________
Ahora el primer ejemplo de código propio:

1 primera linea de codigopropio
2 segunda linea de codigopropio
3 tercera linea de codigopropio
_______________________________

Bien, teniendo estos dos fragmentos, si yo escribo algo tal que asi...

1 importa codigoajeno.lol
2 primera linea de codigopropio
3 segunda linea de codigopropio
4 tercera linea de codigopropio
_______________________________
El resultado sera...

1 primera linea de codigoajeno
2 segunda linea de codigoajeno
3 tercera linea de codigoajeno
4 primera linea de codigopropio
5 segunda linea de codigopropio
6 tercera linea de codigopropio
_______________________________

De este modo, si yo en un futuro agrego/modifico cualquier linea en el código ajeno (por ejemplo, 4 borra todo lo que encuentres), esta pasaría automáticamente al código propio, generalmente al recompilar todo el asunto, pero en el caso de Greasemonkey dicho proceso se realiza cada vez que se carga el script, cosa que sucede cada vez que se carga la página que lo usa, por lo que el control de estas "importaciones de terceros" es prácticamente nulo.

Y esto es lo que ha ocurrido en el caso que comentaba arriba, donde numerosos scripts para dicho juego, alojados en la conocida comunidad userscripts.org, heredaron sin saberlo un código que, si bien bastante simple, era igual de destructivo... Provocando que múltiples jugadores perdieran "ciudades" en el mismo. (Vamos, dicho finamente una gran putada/meses/años en según que casos)

El código simplemente detectaba una "ID", lo insertaba en la correspondiente "URL" que realizaba la función de borrar, tras lo cual automatizaba la aceptación del formulario que debía aparecer pidiendo la confirmación a dicha acción... Es lo que tiene "Automatizar" algo, que se hace de forma automática :)

Normalmente, los Scripts para dicho juego cumplen determinadas funciones especificas que, generalmente, agilizan algunos aspectos del juego (incluso automatizar, cosa prohibida pero que mas de un anormal jugador se pasa por el forrillo de la pelusa)... Pero claro, siempre y cuando el inútil programador de dichos Scripts tenga control total sobre su código, ya que los usuarios finales en el 99% de las ocasiones ni se molestarán en ver "que hace" realmente, exponiendo de ese modo otro gran fallo de seguridad que, quizá, ilustre en otra entrada (Mama mama, me han robado mi cuenta de gmail/hotmail/feisbus/tuenti/twiter/otramierdecillasimilar...)

Obviamente los irresponsables la Administración del juego en cuestión se ha cagado en todo lo que se meneaba ha tomado cartas en el asunto, restaurando una copia de seguridad en los casos que ha sido posible para sufragar dichos "Problemas" (con las correspondientes quejas/agradecimientos de los becerros usuarios), pero queda claro nuevamente que, en la medida de lo posible, es mejor usar nuestro propio código a fin de evitar estos percances de cara al futuro... Sobre todo cuando sea tan dinámico como el caso de importaciones en Greasemonkey.

Algunos autores de la mencionada comunidad ya han tomado medidas, usando una copia propia del código afectado sin el "huevo de pascua" en cuestión... Usar las cosas sin saber o al menos, sin controlar sus cambios, tarde o temprano pasa factura.

Esta entrada va dedicada a "mi churrero", uno de los Administradores del juego comentado en la comunidad Española :3 (te dejo anónimo, si quieres créditos ya sabes donde pedirlos... al fondo bajo la mesa)

4 comentarios:

  1. Che repelotudo del orto, poné el código que quiero hackiar otra ves la comunidad!! xDDD

    P.D Buena entrada, me va gustando la temática que va cogiendo tu blog :)

    ResponderEliminar
  2. Vaya vaya... pues si va gustando esto habrá que hacer algo para remediarlo no? ^^.

    ResponderEliminar
  3. "otramierdecillasimilar.. "xDDD jajajajajaja, que bueno.
    Qué minimo que si se copia y pega o se usa un script ajeno el de leerlo...

    ResponderEliminar
  4. Se nota que era temprano nena... por mucho que se lean el código, el problema es que este puede ser modificado por el autor original sin que los "herederos" verifiquen dicha actualización, ahí el problema de importar código ajeno ^^.

    Hasta el momento de "la catástrofe" los códigos alterados eran completamente funcionales, de hecho la mayoría de autores han rescatado una versión "limpia" de dicho código para reimportarlo, esta vez bajo su supervisión.

    Obviamente lo mas seguro seria recoger únicamente la parte que se necesite, pero no se le pueden pedir peras al olmo :).

    ResponderEliminar