VYPR
High severityNVD Advisory· Published Jul 1, 2019· Updated Aug 4, 2024

CVE-2019-13118

CVE-2019-13118

Description

In numbers.c in libxslt 1.1.33, a type holding grouping characters of an xsl:number instruction was too narrow and an invalid character/length combination could be passed to xsltNumberFormatDecimal, leading to a read of uninitialized stack data.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

In libxslt 1.1.33, an insufficiently wide type for grouping characters in xsl:number allows reading uninitialized stack data.

CVE-2019-13118 is a stack-based information disclosure vulnerability in libxslt version 1.1.33. The bug resides in the numbers.c file, where the type used to hold grouping characters for xsl:number processing is too narrow. This flaw causes an invalid combination of a character and its length to be passed to the xsltNumberFormatDecimal function, resulting in a read of uninitialized stack memory [2].

Exploitation requires processing a crafted XSLT stylesheet that includes a specially constructed xsl:number instruction. No authentication is needed if the attacker can supply the malicious XSLT to an application that processes it using the vulnerable libxslt library. The attack surface includes any service or application that handles user-supplied XSLT transforms, such as web browsers or document processing tools [1].

The impact is a limited but potentially valuable information leak: uninitialized stack data may contain sensitive information from earlier function calls. While this is not a code execution vulnerability, it could assist an attacker in bypassing memory protections like ASLR when combined with other bugs [2].

Apple addressed this issue by updating the libxslt included in macOS Mojave 10.14.6, Security Update 2019-004 High Sierra, and Security Update 2019-004 Sierra, released July 22, 2019 [1]. Users should apply the latest macOS updates to remediate this vulnerability.

AI Insight generated on May 22, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
nokogiriRubyGems
< 1.10.51.10.5

Affected products

10

Patches

1
43a175339b47

dependency: update libxslt to 1.1.34 final

https://github.com/sparklemotion/nokogiriMike DalessioOct 31, 2019via ghsa
3 files changed · +14 134
  • dependencies.yml+14 13 modified
    @@ -29,13 +29,13 @@ libxml2:
       #
     
     libxslt:
    -  version: "1.1.33"
    -  sha256: "8e36605144409df979cab43d835002f63988f3dc94d5d3537c12796db90e38c8"
    +  version: "1.1.34"
    +  sha256: "98b1bd46d6792925ad2dfe9a87452ea2adebf69dcb9919ffd55bf926a7f93f7f"
       #  manually verified checksum:
       #
    -  #    $ gpg --verify libxslt-1.1.33.tar.gz.asc ports/archives/libxslt-1.1.33.tar.gz
    -  #    gpg: Signature made Thu 03 Jan 2019 01:30:49 PM EST
    -  #    gpg:                using RSA key 15588B26596BEA5D
    +  #    $ gpg --verify ~/Downloads/libxslt-1.1.34.tar.gz.asc ports/archives/libxslt-1.1.34.tar.gz
    +  #    gpg: Signature made Wed 30 Oct 2019 04:02:48 PM EDT
    +  #    gpg:                using RSA key DB46681BB91ADCEA170FA2D415588B26596BEA5D
       #    gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>" [unknown]
       #    gpg:                 aka "Daniel Veillard <Daniel.Veillard@w3.org>" [unknown]
       #    gpg: WARNING: This key is not certified with a trusted signature!
    @@ -46,14 +46,15 @@ libxslt:
       #  using this pgp signature:
       #
       #    -----BEGIN PGP SIGNATURE-----
    -  #
    -  #    iQEcBAABAgAGBQJcLlTZAAoJEBVYiyZZa+pd9NkIAIf6ei2iSpR/0QOyS71esDq8
    -  #    407PcUXd/yUjDANm4Uvm7kKK+SbbfBxFIPva4g984Noe1zYMfjK3u3iNs6jykySf
    -  #    mN5eo2wNCxsZnqjbnsLgQvn5VCQpPInTddTuGUxgqJyvnR7p785L1oA2EStSPMP4
    -  #    BGZ9dZGlbreK35WzgrhUi0VN5egJW2fpMsw7rTPvfwK+90gXL0DEm8v3WlA7fCDL
    -  #    QsvuPm7jPOXxdt5bYrVP8wpNMTJIGqV6jxh7Vvl6kiGLldUjCyoCh0AGXLror0Gs
    -  #    sAMlRKJNodpcCYkIWxzjLt74sUciKNrPLHZlXJcclZMONen1GWnVDcv83Tt9n6w=
    -  #    =iAm8
    +  #    
    +  #    iQEzBAABCAAdFiEE20ZoG7ka3OoXD6LUFViLJllr6l0FAl257GgACgkQFViLJllr
    +  #    6l2vVggAjJEHmASiS56SxhPOsGqbfBihM66gQFoIymQfMu2430N1GSTkLsfbkJO8
    +  #    8yBX11NjzK/m9uxwshMW3rVCU7EpL3PUimN3reXdPiQj9hAOAWF1V3BZNevbQC2E
    +  #    FCIraioukaidf8sjUG4/sGpK/gOcP/3hYoN0HUoBigCNJjDqhijxM3M3GJJtCASp
    +  #    jL4CQbs2OmxW8ixOZbuWEESvFFHUgYRsdZjRVN+GRfSOvJjxypurmYwQ3RjO7JxL
    +  #    2FY8qKQ+xpeID8NV8F5OUEvWBjk1QS133VTqBZNlONdnEtV/og6jNu5k0O/Kvhup
    +  #    caR+8TMErOcLr9OgDklO6DoYyAsf9Q==
    +  #    =g4i4
       #    -----END PGP SIGNATURE-----
       #
     
    
  • Manifest.txt+0 1 modified
    @@ -236,4 +236,3 @@ lib/xsd/xmlparser/nokogiri.rb
     patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch
     patches/libxml2/0002-Remove-script-macro-support.patch
     patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch
    -patches/libxslt/0001-Fix-security-framework-bypass.patch
    
  • patches/libxslt/0001-Fix-security-framework-bypass.patch+0 120 removed
    @@ -1,120 +0,0 @@
    -From e03553605b45c88f0b4b2980adfbbb8f6fca2fd6 Mon Sep 17 00:00:00 2001
    -From: Nick Wellnhofer <wellnhofer@aevum.de>
    -Date: Sun, 24 Mar 2019 09:51:39 +0100
    -Subject: [PATCH] Fix security framework bypass
    -
    -xsltCheckRead and xsltCheckWrite return -1 in case of error but callers
    -don't check for this condition and allow access. With a specially
    -crafted URL, xsltCheckRead could be tricked into returning an error
    -because of a supposedly invalid URL that would still be loaded
    -succesfully later on.
    -
    -Fixes #12.
    -
    -Thanks to Felix Wilhelm for the report.
    ----
    - libxslt/documents.c | 18 ++++++++++--------
    - libxslt/imports.c   |  9 +++++----
    - libxslt/transform.c |  9 +++++----
    - libxslt/xslt.c      |  9 +++++----
    - 4 files changed, 25 insertions(+), 20 deletions(-)
    -
    -diff --git a/libxslt/documents.c b/libxslt/documents.c
    -index 3f3a731..4aad11b 100644
    ---- a/libxslt/documents.c
    -+++ b/libxslt/documents.c
    -@@ -296,10 +296,11 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) {
    - 	int res;
    - 
    - 	res = xsltCheckRead(ctxt->sec, ctxt, URI);
    --	if (res == 0) {
    --	    xsltTransformError(ctxt, NULL, NULL,
    --		 "xsltLoadDocument: read rights for %s denied\n",
    --			     URI);
    -+	if (res <= 0) {
    -+            if (res == 0)
    -+                xsltTransformError(ctxt, NULL, NULL,
    -+                     "xsltLoadDocument: read rights for %s denied\n",
    -+                                 URI);
    - 	    return(NULL);
    - 	}
    -     }
    -@@ -372,10 +373,11 @@ xsltLoadStyleDocument(xsltStylesheetPtr style, const xmlChar *URI) {
    - 	int res;
    - 
    - 	res = xsltCheckRead(sec, NULL, URI);
    --	if (res == 0) {
    --	    xsltTransformError(NULL, NULL, NULL,
    --		 "xsltLoadStyleDocument: read rights for %s denied\n",
    --			     URI);
    -+	if (res <= 0) {
    -+            if (res == 0)
    -+                xsltTransformError(NULL, NULL, NULL,
    -+                     "xsltLoadStyleDocument: read rights for %s denied\n",
    -+                                 URI);
    - 	    return(NULL);
    - 	}
    -     }
    -diff --git a/libxslt/imports.c b/libxslt/imports.c
    -index 874870c..3783b24 100644
    ---- a/libxslt/imports.c
    -+++ b/libxslt/imports.c
    -@@ -130,10 +130,11 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
    - 	int secres;
    - 
    - 	secres = xsltCheckRead(sec, NULL, URI);
    --	if (secres == 0) {
    --	    xsltTransformError(NULL, NULL, NULL,
    --		 "xsl:import: read rights for %s denied\n",
    --			     URI);
    -+	if (secres <= 0) {
    -+            if (secres == 0)
    -+                xsltTransformError(NULL, NULL, NULL,
    -+                     "xsl:import: read rights for %s denied\n",
    -+                                 URI);
    - 	    goto error;
    - 	}
    -     }
    -diff --git a/libxslt/transform.c b/libxslt/transform.c
    -index 1379391..0636dbd 100644
    ---- a/libxslt/transform.c
    -+++ b/libxslt/transform.c
    -@@ -3493,10 +3493,11 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
    -      */
    -     if (ctxt->sec != NULL) {
    - 	ret = xsltCheckWrite(ctxt->sec, ctxt, filename);
    --	if (ret == 0) {
    --	    xsltTransformError(ctxt, NULL, inst,
    --		 "xsltDocumentElem: write rights for %s denied\n",
    --			     filename);
    -+	if (ret <= 0) {
    -+            if (ret == 0)
    -+                xsltTransformError(ctxt, NULL, inst,
    -+                     "xsltDocumentElem: write rights for %s denied\n",
    -+                                 filename);
    - 	    xmlFree(URL);
    - 	    xmlFree(filename);
    - 	    return;
    -diff --git a/libxslt/xslt.c b/libxslt/xslt.c
    -index 780a5ad..a234eb7 100644
    ---- a/libxslt/xslt.c
    -+++ b/libxslt/xslt.c
    -@@ -6763,10 +6763,11 @@ xsltParseStylesheetFile(const xmlChar* filename) {
    - 	int res;
    - 
    - 	res = xsltCheckRead(sec, NULL, filename);
    --	if (res == 0) {
    --	    xsltTransformError(NULL, NULL, NULL,
    --		 "xsltParseStylesheetFile: read rights for %s denied\n",
    --			     filename);
    -+	if (res <= 0) {
    -+            if (res == 0)
    -+                xsltTransformError(NULL, NULL, NULL,
    -+                     "xsltParseStylesheetFile: read rights for %s denied\n",
    -+                                 filename);
    - 	    return(NULL);
    - 	}
    -     }
    --- 
    -2.17.1
    -
    

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

53

News mentions

0

No linked articles in our index yet.