You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "xiaoqin.fu (JIRA)" <ji...@apache.org> on 2019/08/17 16:43:00 UTC
[jira] [Updated] (THRIFT-4930) An information leakage about socket
input stream or output stream from TIOStreamTransport to TSocket
[ https://issues.apache.org/jira/browse/THRIFT-4930?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
xiaoqin.fu updated THRIFT-4930:
-------------------------------
Description:
Operations: During Apache Thrift integration testing, I developed a calculator application with a client and a server. The client sent a computational command and get the result from the server. After I applied dynamic taint analyzer (distTaint), I found bugs from taint paths finally.
The source: org.apache.thrift.transport.TIOStreamTransport:
public int read(byte[] buf, int off, int len) throws TTransportException {
if (inputStream_ == null) {
throw new TTransportException(TTransportException.NOT_OPEN, "Cannot read from null inputStream");
}
int bytesRead;
......
bytesRead = inputStream_.read(buf, off, len);
......
}
The sink: org.apache.thrift.transport.TSocket:
public void close() {
......
if (socket_ != null) {
try {
socket_.close();
} catch (IOException iox) {
LOGGER.warn("Could not close socket.", iox);
}
socket_ = null;
}
}
Sensitive information about socket input stream or output stream is leaked.
The taint path:
org.apache.thrift.transport.TIOStreamTransport -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TIOStreamTransport -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TIOStreamTransport -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$Client -->
org.apache.thrift.protocol.TMessage -->
org.apache.thrift.protocol.TField -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.protocol.TField -->
CalculatorService$Client -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TField -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$Client -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$Client -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.protocol.TMessage -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.protocol.TMessage -->
CalculatorService$add_result$add_resultStandardScheme -->
CalculatorService$add_args -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result -->
CalculatorService$add_args -->
org.apache.thrift.TServiceClient -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_args -->
CalculatorService$add_result$add_resultStandardScheme -->
CalculatorService$add_result -->
org.apache.thrift.EncodingUtils -->
CalculatorClient -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.EncodingUtils -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.EncodingUtils -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.EncodingUtils -->
CalculatorService$add_args -->
CalculatorService$add_args$add_argsStandardSchemeFactory -->
CalculatorClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardSchemeFactory -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_args -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_args -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorClient -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TSocket
I am going to submit a CVE, so please confirm this is not a true positive.
was:
The source: org.apache.thrift.transport.TIOStreamTransport:
public int read(byte[] buf, int off, int len) throws TTransportException {
if (inputStream_ == null) {
throw new TTransportException(TTransportException.NOT_OPEN, "Cannot read from null inputStream");
}
int bytesRead;
......
bytesRead = inputStream_.read(buf, off, len);
......
}
The sink: org.apache.thrift.transport.TSocket:
public void close() {
......
if (socket_ != null) {
try {
socket_.close();
} catch (IOException iox) {
LOGGER.warn("Could not close socket.", iox);
}
socket_ = null;
}
}
Sensitive information about socket input stream or output stream is leaked.
The taint path:
org.apache.thrift.transport.TIOStreamTransport -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TTransport -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TIOStreamTransport -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TIOStreamTransport -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$Client -->
org.apache.thrift.protocol.TMessage -->
org.apache.thrift.protocol.TField -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.protocol.TField -->
CalculatorService$Client -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TField -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$Client -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$Client -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.protocol.TMessage -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardScheme -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.protocol.TMessage -->
CalculatorService$add_result$add_resultStandardScheme -->
CalculatorService$add_args -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result -->
CalculatorService$add_args -->
org.apache.thrift.TServiceClient -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_args -->
CalculatorService$add_result$add_resultStandardScheme -->
CalculatorService$add_result -->
org.apache.thrift.EncodingUtils -->
CalculatorClient -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.TServiceClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.EncodingUtils -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.EncodingUtils -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.EncodingUtils -->
CalculatorService$add_args -->
CalculatorService$add_args$add_argsStandardSchemeFactory -->
CalculatorClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_result$add_resultStandardSchemeFactory -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorClient -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_args -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorService$add_args -->
org.apache.thrift.protocol.TBinaryProtocol -->
CalculatorClient -->
CalculatorService$add_result -->
org.apache.thrift.protocol.TBinaryProtocol -->
org.apache.thrift.transport.TSocket -->
> An information leakage about socket input stream or output stream from TIOStreamTransport to TSocket
> ----------------------------------------------------------------------------------------------------
>
> Key: THRIFT-4930
> URL: https://issues.apache.org/jira/browse/THRIFT-4930
> Project: Thrift
> Issue Type: Bug
> Components: Java - Library
> Affects Versions: 0.11.0, 0.12.0
> Environment: Ubuntu 16.04.3 LTS
> Open JDK version "1.8.0_191" build 25.191-b12
> Reporter: xiaoqin.fu
> Priority: Major
> Attachments: TaintPath
>
>
> Operations: During Apache Thrift integration testing, I developed a calculator application with a client and a server. The client sent a computational command and get the result from the server. After I applied dynamic taint analyzer (distTaint), I found bugs from taint paths finally.
> The source: org.apache.thrift.transport.TIOStreamTransport:
> public int read(byte[] buf, int off, int len) throws TTransportException {
> if (inputStream_ == null) {
> throw new TTransportException(TTransportException.NOT_OPEN, "Cannot read from null inputStream");
> }
> int bytesRead;
> ......
> bytesRead = inputStream_.read(buf, off, len);
> ......
> }
> The sink: org.apache.thrift.transport.TSocket:
> public void close() {
> ......
> if (socket_ != null) {
> try {
> socket_.close();
> } catch (IOException iox) {
> LOGGER.warn("Could not close socket.", iox);
> }
> socket_ = null;
> }
> }
> Sensitive information about socket input stream or output stream is leaked.
> The taint path:
> org.apache.thrift.transport.TIOStreamTransport -->
> org.apache.thrift.transport.TTransport -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TTransport -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TTransport -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TTransport -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TTransport -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TTransport -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TTransport -->
> CalculatorService$add_result$add_resultStandardScheme -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.TServiceClient -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TIOStreamTransport -->
> CalculatorService$add_result$add_resultStandardScheme -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TIOStreamTransport -->
> CalculatorService$add_result$add_resultStandardScheme -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$Client -->
> org.apache.thrift.protocol.TMessage -->
> org.apache.thrift.protocol.TField -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_result$add_resultStandardScheme -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_result$add_resultStandardScheme -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.protocol.TField -->
> CalculatorService$Client -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_result -->
> org.apache.thrift.TServiceClient -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.TServiceClient -->
> org.apache.thrift.protocol.TField -->
> CalculatorService$add_result$add_resultStandardScheme -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$Client -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$Client -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.protocol.TMessage -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.TServiceClient -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.TServiceClient -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_result$add_resultStandardScheme -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.protocol.TMessage -->
> CalculatorService$add_result$add_resultStandardScheme -->
> CalculatorService$add_args -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_result -->
> CalculatorService$add_args -->
> org.apache.thrift.TServiceClient -->
> CalculatorService$add_result -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_args -->
> CalculatorService$add_result$add_resultStandardScheme -->
> CalculatorService$add_result -->
> org.apache.thrift.EncodingUtils -->
> CalculatorClient -->
> CalculatorService$add_result -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.TServiceClient -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_result -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.EncodingUtils -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.EncodingUtils -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.EncodingUtils -->
> CalculatorService$add_args -->
> CalculatorService$add_args$add_argsStandardSchemeFactory -->
> CalculatorClient -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_result$add_resultStandardSchemeFactory -->
> CalculatorService$add_result -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorClient -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_args -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorService$add_args -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> CalculatorClient -->
> CalculatorService$add_result -->
> org.apache.thrift.protocol.TBinaryProtocol -->
> org.apache.thrift.transport.TSocket
> I am going to submit a CVE, so please confirm this is not a true positive.
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)