** Description changed:
[Impact]
- * remoteip/mod_rewrite and a proxy might allow faking the source URL
+ * remoteip/mod_rewrite and a proxy might allow faking the source URL
- * TBD - once the fix was analyzed
+ * Fix by backporting an upstream change added in 2.4.24 and later (was not
+ changed since the fix).
+
+ * The fix is small and only changes behavior in a very special case that
+ formerly was broken (if there was a useragent_addr on re-processing).
+ For other cases the behavior is unchanged.
[Test Case]
$ apt install apache2 libapache2-mod-php
define /etc/apache2/sites-enabled/000-default.conf as:
<VirtualHost *:8080>
- DocumentRoot /var/www/html
+ DocumentRoot /var/www/html
- <IfModule mod_remoteip.c>
- RemoteIPInternalProxy 127.0.0.1
- RemoteIPHeader X-Forwarded-For
- </IfModule>
+ <IfModule mod_remoteip.c>
+ RemoteIPInternalProxy 127.0.0.1
+ RemoteIPHeader X-Forwarded-For
+ </IfModule>
- <Directory /var/www/html>
- RewriteEngine On
- RewriteRule .* index.php [L,QSA]
- </Directory>
+ <Directory /var/www/html>
+ RewriteEngine On
+ RewriteRule .* index.php [L,QSA]
+ </Directory>
</VirtualHost>
In File /etc/apache2/ports.conf change
Listen 80
to
Listen 8080
$ sudo a2enmod rewrite
$ sudo a2enmod remoteip
$ sudo a2enmod php7.0
$ systemctl restart apache2
$ apt install nginx
define file /etc/nginx/sites-enabled/default as:
server {
- listen 80 default_server;
- root /var/www/html;
- server_name _;
+ listen 80 default_server;
+ root /var/www/html;
+ server_name _;
- location / {
- proxy_pass http://127.0.0.1:8080;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
+ location / {
+ proxy_pass http://127.0.0.1:8080;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
}
$ systemctl restart nginx
define file /var/www/html/index.php as:
<?php
echo $_SERVER['REMOTE_ADDR'] . "\n";
?>
$ curl http://localhost/index.php
127.0.0.1
$ curl http://localhost/seo-friendly-url
127.0.0.1
$ curl http://localhost/seo-friendly-url -H "X-Forwarded-For: 1.1.1.1"
1.1.1.1
Expected:
- the last one should not be the fake 1.1.1.1
- if you do this from a remote host it should show the remote IP for all
three.
[Regression Potential]
- * TBD
+ * If remote_ip isn' enabled (the common case) the change should be a no-
+ op. It only is important when using remote_ip and processing things
+ twice e.g. on an error handler. There due to an issue it allowed to fake
+ the RemoteIP. Fixing that should fix the issue, but not break other
+ things - if anywhere then remoteIP handling would be the one expected to
+ see regressions of any sort, but most likely only if people started to
+ rely on the bad behavior.
[Other Info]
-
- * one can debate if this is a security issue (crafting of wrong origin
- logs) or not but I'll leave that to other people.
+
+ * one can debate if this is a security issue (crafting of wrong origin
+ logs) or not but I'll leave that to other people.
---
There is a bug in mod_remoteip (a part of Apache Web Server):
https://bz.apache.org/bugzilla/show_bug.cgi?id=60251
Although the status of this bug is "NEW", actually it was fixed in Apache
2.4.24.
Although a CVE id was not requested yet, actually it is a vulnerability.
The fix was not backported to Ubuntu 16.04 (xenial).
Impact: if a victim uses Apache rewrite rules, then an attacker can
spoof his IP address for logs and PHP scripts.
ProblemType: Bug
DistroRelease: Ubuntu 16.04
Package: apache2 2.4.18-2ubuntu3.14
ProcVersionSignature: Ubuntu 4.4.0-22.40-generic 4.4.8
Uname: Linux 4.4.0-22-generic x86_64
Apache2ConfdDirListing: False
ApportVersion: 2.20.1-0ubuntu2.23
Architecture: amd64
Date: Mon Apr 27 13:17:43 2020
SourcePackage: apache2
UpgradeStatus: No upgrade log present (probably fresh install)
error.log:
modified.conffile..etc.apache2.apache2.conf: [modified]
modified.conffile..etc.apache2.mods-available.dir.conf: [modified]
modified.conffile..etc.apache2.mods-available.ssl.conf: [modified]
modified.conffile..etc.apache2.ports.conf: [modified]
modified.conffile..etc.apache2.sites-available.000-default.conf: [modified]
modified.conffile..etc.apache2.sites-available.default-ssl.conf: [modified]
mtime.conffile..etc.apache2.apache2.conf: 2020-04-23T15:45:48.416970
mtime.conffile..etc.apache2.mods-available.dir.conf:
2020-04-23T12:03:13.711062
mtime.conffile..etc.apache2.mods-available.ssl.conf:
2020-04-23T12:02:44.854484
mtime.conffile..etc.apache2.ports.conf: 2020-04-23T15:45:48.169037
mtime.conffile..etc.apache2.sites-available.000-default.conf:
2020-04-23T15:45:48.197030
mtime.conffile..etc.apache2.sites-available.default-ssl.conf:
2020-04-23T15:45:48.225022
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1875299
Title:
Apache's mod_remoteip: IP address spoofing via X-Forwarded-For when
mod_rewrite rule is triggered
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1875299/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs