VYPR
High severityNVD Advisory· Published Oct 28, 2019· Updated Aug 4, 2024

CVE-2019-0210

CVE-2019-0210

Description

Apache Thrift 0.9.3 to 0.12.0 Go servers using TJSONProtocol or TSimpleJSONProtocol can panic on crafted input, causing a denial of service.

AI Insight

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

Apache Thrift 0.9.3 to 0.12.0 Go servers using TJSONProtocol or TSimpleJSONProtocol can panic on crafted input, causing a denial of service.

Vulnerability

Overview

Apache Thrift versions 0.9.3 through 0.12.0 contain a denial-of-service vulnerability affecting Go server implementations. When a server uses the TJSONProtocol or TSimpleJSONProtocol, specially crafted invalid input data can trigger a panic, crashing the server [1][2][3][4]. The root cause is improper handling of malformed JSON in the Go runtime, leading to an unhandled panic rather than a graceful error.

Exploitation

Conditions

An unauthenticated attacker can exploit this vulnerability by sending a maliciously crafted JSON payload to an affected Thrift endpoint. The attack requires network access to the server's listening port but does not require authentication or prior knowledge [4]. The vulnerability is specific to Go-based servers using these particular JSON protocols; other languages or protocols within Thrift are not affected.

Impact

Successful exploitation results in a denial-of-service (DoS) condition, causing the target server to panic and terminate abruptly. This can lead to service disruption, requiring manual restart or automated recovery mechanisms to restore availability [1][2][3][4]. The impact is limited to availability, as there is no evidence of remote code execution or data exfiltration.

Mitigation

Apache has addressed the issue in Thrift releases after 0.12.0. Users of affected versions should upgrade to a patched release. Red Hat has provided updates for JBoss Enterprise Application Platform (EAP) that include the fix (RHSA-2020:0804, RHSA-2020:0805, RHSA-2020:0806) [1][2][3]. No workaround is available beyond upgrading or avoiding the use of the vulnerable protocols.

AI Insight generated on May 21, 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
github.com/apache/thriftGo
>= 0.9.3, < 0.13.00.13.0

Affected products

2

Patches

1
264a3f318ed3

additional test for TSimpleJSONProtocol

https://github.com/apache/thriftJens GeyerFeb 23, 2019via ghsa
3 files changed · +25 6
  • lib/go/thrift/json_protocol.go+1 4 modified
    @@ -32,10 +32,7 @@ const (
     // for references to _ParseContext see tsimplejson_protocol.go
     
     // JSON protocol implementation for thrift.
    -//
    -// This protocol produces/consumes a simple output format
    -// suitable for parsing by scripting languages.  It should not be
    -// confused with the full-featured TJSONProtocol.
    +// Utilizes Simple JSON protocol
     //
     type TJSONProtocol struct {
     	*TSimpleJSONProtocol
    
  • lib/go/thrift/simple_json_protocol.go+2 2 modified
    @@ -60,7 +60,7 @@ func (p _ParseContext) String() string {
     	return "UNKNOWN-PARSE-CONTEXT"
     }
     
    -// JSON protocol implementation for thrift.
    +// Simple JSON protocol implementation for thrift.
     //
     // This protocol produces/consumes a simple output format
     // suitable for parsing by scripting languages.  It should not be
    @@ -1316,7 +1316,7 @@ func (p *TSimpleJSONProtocol) readNumeric() (Numeric, error) {
     func (p *TSimpleJSONProtocol) safePeekContains(b []byte) bool {
     	for i := 0; i < len(b); i++ {
     		a, _ := p.reader.Peek(i + 1)
    -		if len(a) == 0 || a[i] != b[i] {
    +		if len(a) < (i+1) || a[i] != b[i] {
     			return false
     		}
     	}
    
  • lib/go/thrift/simple_json_protocol_test.go+22 0 modified
    @@ -714,3 +714,25 @@ func TestWriteSimpleJSONProtocolMap(t *testing.T) {
     	}
     	trans.Close()
     }
    +
    +func TestWriteSimpleJSONProtocolSafePeek(t *testing.T) {
    +	trans := NewTMemoryBuffer()
    +	p := NewTSimpleJSONProtocol(trans)
    +	trans.Write([]byte{'a', 'b'})
    +	trans.Flush(context.Background())
    +	
    +	test1 := p.safePeekContains([]byte{'a', 'b'})
    +	if !test1 {
    +		t.Fatalf("Should match at test 1")
    +	}
    +	
    +	test2 := p.safePeekContains([]byte{'a', 'b', 'c', 'd'})
    +	if test2 {
    +		t.Fatalf("Should not match at test 2")
    +	}
    +	
    +	test3 := p.safePeekContains([]byte{'x', 'y'})
    +	if test3 {
    +		t.Fatalf("Should not match at test 3")
    +	}
    +}
    

Vulnerability mechanics

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

References

21

News mentions

0

No linked articles in our index yet.