<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>