I run the server where this Joomla! site is hosted, so I have root
access to it. There is something in the configuration, or somewhere in its code, that keeps browsing the site itself. If I run
# tail -f /var/log/apache2/softwareliberopinerolo.org-access.log
I see several logs of accesses from the server IP address to the website itself. They come at average peace of about 5 per second, steady, with almost no significant peaks or rests.
Here is an excerpt of what I see:
10.7.33.103 - - [05/Jan/2019:08:22:04 +0100] "GET /index.php/masky/6/howto/news/howto/howto/5-incontri/templates/beez5/css/general_mozilla.css HTTP/1.1" 404 10141 "https://softwareliberopinerolo.org/index.php/masky/6/howto/news/howto/howto/5-incontri/news" "Serf/1.3.9 (mod_pagespeed/1.13.35.2-0)"
10.7.33.103 - - [05/Jan/2019:08:22:04 +0100] "GET /index.php/masky/6/howto/news/howto/howto/5-incontri/media/system/js/mootools-core.js?65367038804095b968188728ff07f5e3 HTTP/1.1" 404 10095 "https://softwareliberopinerolo.org/index.php/masky/6/howto/news/howto/howto/5-incontri/news" "Serf/1.3.9 (mod_pagespeed/1.13.35.2-0)"
10.7.33.103 - - [05/Jan/2019:08:22:04 +0100] "GET /index.php/masky/6/howto/news/howto/howto/5-incontri/media/system/js/core.js?65367038804095b968188728ff07f5e3 HTTP/1.1" 404 10093 "https://softwareliberopinerolo.org/index.php/masky/6/howto/news/howto/howto/5-incontri/news" "Serf/1.3.9 (mod_pagespeed/1.13.35.2-0)"
10.7.33.103 - - [05/Jan/2019:08:22:04 +0100] "GET /index.php/masky/6/howto/news/howto/howto/5-incontri/media/system/js/mootools-more.js?65367038804095b968188728ff07f5e3 HTTP/1.1" 404 10095 "https://softwareliberopinerolo.org/index.php/masky/6/howto/news/howto/howto/5-incontri/news" "Serf/1.3.9 (mod_pagespeed/1.13.35.2-0)"
10.7.33.103 - - [05/Jan/2019:08:22:04 +0100] "GET /index.php/masky/6/howto/news/howto/howto/5-incontri/templates/beez5/javascript/hide.js HTTP/1.1" 404 10225 "https://softwareliberopinerolo.org/index.php/masky/6/howto/news/howto/howto/5-incontri/news" "Serf/1.3.9 (mod_pagespeed/1.13.35.2-0)"
10.7.33.103 - - [05/Jan/2019:08:22:04 +0100] "GET /index.php/masky/6/howto/news/howto/howto/5-incontri/templates/beez5/javascript/md_stylechanger.js HTTP/1.1" 404 10225 "https://softwareliberopinerolo.org/index.php/masky/6/howto/news/howto/howto/5-incontri/news" "Serf/1.3.9 (mod_pagespeed/1.13.35.2-0)"
10.7.33.103 - - [05/Jan/2019:08:22:04 +0100] "GET /index.php/masky/6/howto/news/howto/howto/5-incontri/templates/beez5/favicon.ico HTTP/1.1" 404 10093 "https://softwareliberopinerolo.org/index.php/masky/6/howto/news/howto/howto/5-incontri/news" "Serf/1.3.9 (mod_pagespeed/1.13.35.2-0)"
Please note that:
- 10.7.33.103 in the logs is the source IP address of the requests and it happens to be the real IP address of the Apache server itself too, which is behind a
NAT
- Almost every request gets a
404
because it's looking for non existing URLs. Once in a blue moon there is a request from 10.7.33.103 that hits a existing page. Beez5
template was set as default for a few seconds only to grab this log, in order to show that the URLs are being computed at runtime and they are not (fully) stored anywhere. However the same behavior happens with the site usual template, but in that case I get nobeez5
in the logs.- It's a up-to-date Joomla! 3.9.1 with no extension installed, except the ones that came bundled with official Joomla! package, and except the template (which is not the culprit, because of point 3 here above). However the site was born years ago and more or less regularly updated.
Serf/1.3.9
andmod_pagespeed
in the user agent string tell us it's actually Apache starting the HTTP request, which confirms the source IP address in the logs is correct. However there are no admin scripts in the server, nor exotic Apache configurations I know of, that index the site. The same Apache server hosts other sites as well, all configured the same as this one, and none of them exhibit such behavior.mod_pagespeed
is not to blame, I've already tried disabling it to no avail.- I already looked for malicious scripts months ago, found some and removed them. I'd argue there are leftovers, but I've also reinstalled clean Joomla! files over the existing ones afterwards, so I suspect this isn't a security related problem, because I do not know Joomla! enough to exclude configuration problems.
There is something that is not working as intended for sure. If you follow the Iscriversi all'associazione
link in the side menu, you see it leads to the following wrong URL:
https://softwareliberopinerolo.org/index.php/howto/14-openoffice/eventi/eventi/6-eventi-futuri/news/news/arduino/iscrizione
where you get the correct page contents, but no CSS/JS or whatever other page requisites. howto
, openoffice
, eventi
, news
and so on are all categories inside the CMS, but that page does not belong to any of them. The menu item type is Single Article
and the URL is being generated by Joomla!. Other menu items are working only because I've modified their type to custom URL and I've manually entered the correct URL.
EDIT: I had to deactivate the site, because it was taking up all the server RAM. If you click the link it won't work, but you can trust my description of what you'd see if it worked.
What is browsing the site? Is there any cache configuration in Joomla that can cause such behavior? Or is the site still hacked? How do I find out?
EDIT 2: I've tried the following procedure, which I think excludes any chance to blame malware leftovers, unless Joomla! executes any code it loads from the database:
- Downloaded a clean Joomla 3.9.1 package
- Removed
installation
folder immediately, before even actually using it - Copied over
configuration.php
file from my site and NOTHING ELSE - tested it: the same problem is still there and the site keeps browsing itself. Please note: I did NOT copy over the template, nor the images, so it's only Joomla 3.9.1 original code with my site database.
I think this pretty much shows that Joomla either browses itself server side by design, under some configuration, OR it has some feature/bug that makes it execute arbitrary code it loads from the database, and in my case that code was injected by some malware in the past. Do you agree?