Segmentation fault with IonCube or SourceGuardian loaders #873
Description
Description
We faced a 'Segmentation fault' issue when using NewRelic APM 10.19.0.9-1 with PHP 8.1 and the latest versions of SourceGuardian or IonCube PHP extensions when using the encoded files.
Steps to Reproduce
- Install the latest version of SourceGuardian or IonCube loaders
- Install the latest version of NewRelic APM
- Try to run encoded files via CGI or CLI
PHP 8.1.27 (cli) (built: Feb 20 2024 15:31:34) (NTS)
ionCube PHP Loader v13.0.2
SourceGuardian v14.0.2
$ php -m |grep newrelic
newrelic
$ php AbstractCategory_sg.php
Segmentation fault (core dumped)
$ php AbstractCategory_ioncube.php
Segmentation fault (core dumped)
It is reproducible for both PHP-FPM and CLI, at the same time when the Newrelic PHP extension is disabled the error isn't reproducible.
Relevant Logs / Console output
An example of strace output:
With enabled SourceGuadian loader on a file encoded by SourceGuardian encoder:
read(7, "<?php\r\nreturn sg_load('A574EF8E4CDFF5BCAAQAAAAXAAAABHAAAACABAAAAAAAAAD/DQrnshe3//JpbIWOTWBixCaUoxpbgIXEQ9rv6C8yrBUNY72JTmzkRpgl3sgcmPtWVIWp84RqB5snz9pVkWXdUHZlPhSARK56cTyMs4MJRr8XsqTedsm4BmQl0yaE1+n3ewecgK5KHMwKG80z8sOdywcAAACYtQAAXAy1ND588Uv9o2trmFLjPqTv6"..., 8192) = 8192 close(7) = 0 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x7f895ec7d1e0} --- getpid() = 2259803 write(3, "Process 2259803 (version 10.19.0.9) received signal 11: segmentation violation\n", 79) = 79 write(3, "process id 2259803 fatal signal (SIGSEGV, SIGFPE, SIGILL, SIGBUS, ...) - stack dump follows (code=0x7f8969028000 bss=0x7f8969133fbc):\n", 135) = 135 futex(0x7f8962289088, FUTEX_WAKE_PRIVATE, 2147483647) = 0
With enabled IonCube loader on a file encoded by IonCube encoder:
openat(AT_FDCWD, "/home/user/AbstractCategory_ioncube.php", O_RDONLY) = 7 fstat(7, {st_mode=S_IFREG|0644, st_size=64996, ...}) = 0 mmap(NULL, 64996, PROT_READ, MAP_SHARED, 7, 0) = 0x7ff3bc23e000 brk(NULL) = 0x1ca6000 brk(0x1cc7000) = 0x1cc7000 brk(NULL) = 0x1cc7000 brk(0x1ce8000) = 0x1ce8000 brk(NULL) = 0x1ce8000 brk(0x1d09000) = 0x1d09000 brk(NULL) = 0x1d09000 brk(0x1d2a000) = 0x1d2a000 brk(NULL) = 0x1d2a000 brk(0x1d4b000) = 0x1d4b000 brk(NULL) = 0x1d4b000 brk(0x1d70000) = 0x1d70000 munmap(0x7ff3bc23e000, 64996) = 0 close(7) = 0 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7ff300000001} --- getpid() = 2260021 write(3, "Process 2260021 (version 10.19.0.9) received signal 11: segmentation violation\n", 79) = 79
Your Environment
We can replicate the issue in several different environments (CentOS 7, RockyLinux 8) using PHP 8.1 .