On 06.08.2024 at 20:59, Niels Dossche wrote:

> On 06/08/2024 10:41, Nick Lockheart wrote:
>>
>> Sandbox: Security
>>
>> A SandBox has two use cases:
>>
>> 1. Unit Testing of code with mocks or stubs, and also, allowing testing
>> with different environments.
>>
>> 2. The secure running of 3rd party code inside a 1st party application.
>
> The use-case of securely running 3rd party code inside your application is 
> impossible at this moment, and will still be impossible after a sandbox API 
> is introduced.
> The reason is that the PHP interpreter as it is today is not memory safe. It 
> is relatively easy to cause memory corruption by only using PHP code by 
> abusing things like custom error handlers set from userland. This in turn can 
> be used to gain arbitrary read/write primitives which has been shown to 
> circumvent disable_functions & open_basedir, and some PoCs can even run 
> arbitrary commands. It would be doable to extend these tricks to circumvent a 
> sandboxing API.
> As such, a sandboxing API for securely executing 3rd party code is only 
> possible after the interpreter has become memory safe.
> Although some work has been done in PHP 8.3 to plug many of these memory 
> safety bugs in the VM, much more work remains and would likely require 
> complicated changes.
> So therefore I propose to only focus on the mocking functionality of your 
> proposal for now, until the time comes that the interpreter is memory safe.
> I would therefore also not call it "sandbox".

I concur.  The old <https://pecl.php.net/package/runkit> did provide a
"sandbox" feature, but that had not been ported to
<https://pecl.php.net/package/runkit7>, possibly for exactly these reasons.

> Introducing a sandbox API for security also opens up a can of worms for the 
> security policy.
> Right now we are assuming an attacker model of a remote attacker, and that 
> the code running on your server is trusted.
> But that would change when an official sandbox API is introduced.

Christoph

Reply via email to