2016-11-28 13:02 GMT+01:00 Alex Muntada <[email protected]>:

> Joaquin Ferrero:
>
> > IO::Async <https://metacpan.org/release/IO-Async> - Asynchronous
> > event-driven programming
> >
> >    if( eval { require "IO/Async/OS/$^O.pm" } ) {
> >        @ISA = "IO::Async::OS::$^O";
> >    }
>
> Cuidado con usar $^O de esta manera porque no es una variable
> read-only (se podría manipular para cargar otro módulo), e.g.
>
>     use v5.20;
>
>     package Trojan;
>         sub run { $^O = "../../../Trojan/trojan/$^O" }
>
>     package main;
>     say $^O;
>     Trojan->run();
>     say $^O;
>
> Es preferible usar $Config{osname}, que sí es read-only.
>
> Me pregunto hasta que punto esto sería una vulnerabilidad grave
> de los módulos que usan $^O a saco y que tal vez habría que
> informar de éllo. ¿Qué opináis?
>
>
Pero, ¿como cambias $^O desde el exterior?¿existe alguna forma de hacerlo
que no implique poder correr código arbitrario Perl dentro del programa?

En tu ejemplo, has cargado un paquete "Trojan", pero un atacante que
consigue hacer eso ya tiene el control completo del programa y puede
manipular @ISA o hacer cualquier otra cosa que le plazca directamente.
_______________________________________________
Madrid-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/madrid-pm

Responder a