<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2016-11-28 13:02 GMT+01:00 Alex Muntada <span dir="ltr"><<a href="mailto:alexm@caliu.cat" target="_blank">alexm@caliu.cat</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Joaquin Ferrero:<br>
<span class="gmail-"><br>
> IO::Async <<a href="https://metacpan.org/release/IO-Async" rel="noreferrer" target="_blank">https://metacpan.org/release/<wbr>IO-Async</a>> - Asynchronous<br>
> event-driven programming<br>
><br>
>    if( eval { require "IO/Async/OS/$^O.pm" } ) {<br>
>        @ISA = "IO::Async::OS::$^O";<br>
>    }<br>
<br>
</span>Cuidado con usar $^O de esta manera porque no es una variable<br>
read-only (se podría manipular para cargar otro módulo), e.g.<br>
<br>
    use v5.20;<br>
<br>
    package Trojan;<br>
        sub run { $^O = "../../../Trojan/trojan/$^O" }<br>
<br>
    package main;<br>
    say $^O;<br>
    Trojan->run();<br>
    say $^O;<br>
<br>
Es preferible usar $Config{osname}, que sí es read-only.<br>
<br>
Me pregunto hasta que punto esto sería una vulnerabilidad grave<br>
de los módulos que usan $^O a saco y que tal vez habría que<br>
informar de éllo. ¿Qué opináis?<br>
<br></blockquote><div><br>Pero, ¿como cambias $^O desde el exterior?¿existe alguna 
forma de hacerlo que no implique poder correr código arbitrario Perl 
dentro del programa?<br><div><br></div>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. <br><br></div></div></div></div>