Low severity3.7NVD Advisory· Published Jan 8, 2016· Updated May 6, 2026
CVE-2015-7519
CVE-2015-7519
Description
agent/Core/Controller/SendRequest.cpp in Phusion Passenger before 4.0.60 and 5.0.x before 5.0.22, when used in Apache integration mode or in standalone mode without a filtering proxy, allows remote attackers to spoof headers passed to applications by using an _ (underscore) character instead of a - (dash) character in an HTTP header, as demonstrated by an X_User header.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
passengerRubyGems | < 4.0.60 | 4.0.60 |
passengerRubyGems | >= 5.0.0, < 5.0.22 | 5.0.22 |
Affected products
28cpe:2.3:a:phusionpassenger:phusion_passenger:*:*:*:*:*:*:*:*+ 27 more
- cpe:2.3:a:phusionpassenger:phusion_passenger:*:*:*:*:*:*:*:*range: <=4.0.59
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.0:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.0:beta1:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.0:beta2:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.0:beta3:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.0:rc2:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.1:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.10:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.11:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.12:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.13:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.14:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.15:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.16:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.17:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.18:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.19:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.2:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.20:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.21:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.3:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.4:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.5:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.6:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.7:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.8:*:*:*:*:*:*:*
- cpe:2.3:a:phusionpassenger:phusion_passenger:5.0.9:*:*:*:*:*:*:*
Patches
1ddb8ecc4ebf2Fix CVE-2015-7519 header collision vulnerability
2 files changed · +40 −6
CHANGELOG+1 −0 modified@@ -1,6 +1,7 @@ Release 5.0.22 -------------- + * Fixes a header collision vulnerability (CVE-2015-7519, medium severity). Please see our blog for detailed vulnerability description and advisory. Thanks to the SUSE security team for reporting this issue. * [Apache] Fixes compatibility with Apache 2.4.17's mod_autoindex. Fix contributed by Eric Covener. Closes GH-1642. * [Standalone] Passenger Standalone now [accepts configuration options from environment variables](https://www.phusionpassenger.com/library/config/standalone/intro.html). This makes using Passenger Standalone significantly easier on Heroku or on systems that follow the 12-factor principle. Closes GH-1661. * [Standalone] The Nginx configuration template has been cleaned up. It is now significantly easier to edit the Nginx configuration template without breaking compatibility with future versions.
src/agent/Core/Controller/SendRequest.cpp+39 −6 modified@@ -204,6 +204,33 @@ Controller::sendBodyToAppWhenAppSinkIdle(Channel *_channel, unsigned int size) { } } +static bool +isAlphaNum(char ch) { + return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'); +} + +/** + * For CGI, alphanum headers with optional dashes are mapped to UPP3R_CAS3. This + * function can be used to reject non-alphanum/dash headers that would end up with + * the same mapping (e.g. upp3r_cas3 and upp3r-cas3 would end up the same, and + * potentially collide each other in the receiving application). This is + * used to fix CVE-2015-7519. + */ +static bool +containsNonAlphaNumDash(const LString &s) { + const LString::Part *part = s.start; + while (part != NULL) { + for (unsigned int i = 0; i < part->size; i++) { + const char start = part->data[i]; + if (start != '-' && !isAlphaNum(start)) { + return true; + } + } + part = part->next; + } + return false; +} + static void httpHeaderToScgiUpperCase(unsigned char *data, unsigned int size) { static const boost::uint8_t toUpperMap[256] = { @@ -529,12 +556,18 @@ Controller::constructHeaderForSessionProtocol(Request *req, char * restrict buff ServerKit::HeaderTable::Iterator it(req->headers); while (*it != NULL) { - if ((it->header->hash == HTTP_CONTENT_LENGTH.hash() - || it->header->hash == HTTP_CONTENT_TYPE.hash() - || it->header->hash == HTTP_CONNECTION.hash()) - && (psg_lstr_cmp(&it->header->key, P_STATIC_STRING("content-type")) - || psg_lstr_cmp(&it->header->key, P_STATIC_STRING("content-length")) - || psg_lstr_cmp(&it->header->key, P_STATIC_STRING("connection")))) + // This header-skipping is not accounted for in determineHeaderSizeForSessionProtocol(), but + // since we are only reducing the size it just wastes some mem bytes. + if (( + (it->header->hash == HTTP_CONTENT_LENGTH.hash() + || it->header->hash == HTTP_CONTENT_TYPE.hash() + || it->header->hash == HTTP_CONNECTION.hash() + ) && (psg_lstr_cmp(&it->header->key, P_STATIC_STRING("content-type")) + || psg_lstr_cmp(&it->header->key, P_STATIC_STRING("content-length")) + || psg_lstr_cmp(&it->header->key, P_STATIC_STRING("connection")) + ) + ) || containsNonAlphaNumDash(it->header->key) + ) { it.next(); continue;
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
13- blog.phusion.nl/2015/12/07/cve-2015-7519/nvdVendor Advisory
- github.com/advisories/GHSA-fxwv-953p-7qpfghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2015-7519ghsaADVISORY
- lists.opensuse.org/opensuse-security-announce/2015-12/msg00024.htmlnvdWEB
- www.openwall.com/lists/oss-security/2015/12/07/1nvdWEB
- www.openwall.com/lists/oss-security/2015/12/07/2nvdWEB
- blog.phusion.nl/2015/12/07/cve-2015-7519ghsaWEB
- bugzilla.suse.com/show_bug.cginvdWEB
- github.com/phusion/passenger/commit/ddb8ecc4ebf260e4967f57f271d4f5761abeac3envdWEB
- github.com/rubysec/ruby-advisory-db/blob/master/gems/passenger/CVE-2015-7519.ymlghsaWEB
- lists.debian.org/debian-lts-announce/2018/06/msg00007.htmlnvdWEB
- web.archive.org/web/20220327073056/https://www.puppet.com/security/cve/passenger-dec-2015-security-fixesghsaWEB
- puppet.com/security/cve/passenger-dec-2015-security-fixesnvd
News mentions
0No linked articles in our index yet.