-
Cloaking injected into core files. Two functions —
is_google_bot()and a payload functionaselolejos()— are inserted at the top (lines ~2–6) of:lib/pkp/includes/bootstrap.phplib/pkp/lib/vendor/autoload.phplib/pkp/lib/vendor/composer/autoload_real.phppages/index/index.phpand the rootindex.php
The payload function fetches gambling-spam HTML from a
raw.githubusercontent.comURL and serves it only to Googlebot (Indonesian gambling keywords — “matauangslot”, earlier “NONO4D”). Exact URL/hashes available on request. -
Web shells / a full file-manager dropped into OJS directories:
templates/vendor/— a complete PHP file-manager app (app/, config/, data/User/admin|demo|guest, etc.)- a ~750KB
jottings/index.phpat the web root - shells in
tools/,templates/vendor/app/controller/utils.php, andplugins/paymethod/paypal/locale/hsb/less.php/css/index.php
-
Outage: the host’s scanner (Imunify) partially “cleaned” the injected functions, leaving duplicate declarations across the core files →
PHP Fatal error: Cannot redeclare aselolejos()→ whole site 500s.
Why it keeps coming back (looks like more than an account compromise):
- Removed files reappear within minutes.
- A root-owned binary
/usr/local/bin/filebrowserruns as a per-account daemon and respawns under a new PID after being killed — which a non-root account can’t do. - It survived a server-node migration and a full credential rotation.
- The attacker repeatedly re-adds themselves as a verified Google Search Console owner (by dropping google-site-verification files).
What we’ve already done: restored the injected core files from the official 3.5.0-4 package and chmod 444’d them; added .htaccess (Require all denied for *.php) in public/, cache/, templates/; rotated all credentials; deployed monitoring; and put the site behind a Cloudflare block. Planning a clean migration to a VPS with a fresh OJS install.
Questions:
- Are there known OJS 3.5.0-x or common-plugin vulnerabilities allowing arbitrary file write to
templates/,tools/, orpages/that could be the entry vector? Anything specific to check or patch? - Recommended OJS hardening (shared and VPS): file permissions, securing or removing
tools/, lockingtemplates/,files_dirplacement. - Has anyone seen this exact campaign (
aselolejos/is_google_bot/ matauangslot, payload from a GitHub raw URL)? - Best practice for a clean DB +
files_dirmigration so no reinfected code carries over.