Bug 1552628 (CVE-2018-1000120) - CVE-2018-1000120 curl: FTP path trickery leads to NIL byte out of bounds write
Summary: CVE-2018-1000120 curl: FTP path trickery leads to NIL byte out of bounds write
Status: NEW
Alias: CVE-2018-1000120
Product: Security Response
Classification: Other
Component: vulnerability   
(Show other bugs)
Version: unspecified
Hardware: All Linux
medium
medium
Target Milestone: ---
Assignee: Red Hat Product Security
QA Contact:
URL:
Whiteboard: impact=moderate,public=20180314,repor...
Keywords: Security
Depends On: 1555207 1555208 1555209 1555210 1555221 1555222
Blocks: 1552634
TreeView+ depends on / blocked
 
Reported: 2018-03-07 13:07 UTC by Andrej Nemec
Modified: 2018-11-13 08:35 UTC (History)
25 users (show)

Fixed In Version: curl 7.59.0
Doc Type: If docs needed, set a value
Doc Text:
It was found that libcurl did not safely parse FTP URLs when using the CURLOPT_FTP_FILEMETHOD method. An attacker, able to provide a specially crafted FTP URL to an application using libcurl, could write a NULL byte at an arbitrary location, resulting in a crash, or an unspecified behavior.
Story Points: ---
Clone Of:
Environment:
Last Closed:
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
upstream patch (4.18 KB, patch)
2018-03-07 13:17 UTC, Andrej Nemec
no flags Details | Diff


External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2018:3157 None None None 2018-10-30 07:43 UTC
Red Hat Product Errata RHSA-2018:3558 None None None 2018-11-13 08:35 UTC

Description Andrej Nemec 2018-03-07 13:07:21 UTC
It was found that curl can be fooled into writing a zero byte out of bounds.

This bug can trigger when curl is told to work on an FTP URL, with the setting
to only issue a single CWD command (`--ftp-method singlecwd` or the libcurl
alternative `CURLOPT_FTP_FILEMETHOD`).

curl then URL-decodes the given path, calls strlen() on the result and deducts
the length of the file name part to find the end of the directory within the
buffer. It then writes a zero byte on that index, in a buffer allocated on the
heap.

If the directory part of the URL contains a "%00" sequence, the directory
length might end up shorter than the file name path, making the calculation
`size_t index = directory_len - filepart_len` end up with a huge index
variable for where the zero byte gets stored: `heap_buffer[index] = 0`. On
several architectures that huge index will wrap and work as a negative value,
thus overwriting memory *before* the intended heap buffer.

By using different file part lengths and putting %00 in different places in
the URL, an attacker that can control what paths a curl-using application uses
can write that zero byte on different indexes.

Comment 1 Andrej Nemec 2018-03-07 13:07:29 UTC
Acknowledgments:

Name: the Curl project
Upstream: Duy Phan Thanh

Comment 2 Andrej Nemec 2018-03-07 13:17 UTC
Created attachment 1405333 [details]
upstream patch

Comment 4 Cedric Buissart 2018-03-13 20:57:48 UTC
Mitigation:

Preventing application from using non-default CURLOPT_FTP_FILEMETHOD will avoid triggering the vulnerable code.

Comment 5 Adam Mariš 2018-03-14 07:30:53 UTC
External References:

https://curl.haxx.se/docs/adv_2018-9cd6.html

Comment 6 Adam Mariš 2018-03-14 07:33:39 UTC
Created mingw-curl tracking bugs for this issue:

Affects: fedora-all [bug 1555207]


Created curl tracking bugs for this issue:

Affects: fedora-all [bug 1555209]


Created mingw-curl tracking bugs for this issue:

Affects: epel-7 [bug 1555208]

Comment 9 Cedric Buissart 2018-03-14 08:35:48 UTC
Upstream commit: 
 FTP: reject path components with control codes 
https://github.com/curl/curl/commit/535432c0ad

Comment 12 errata-xmlrpc 2018-10-30 07:43:06 UTC
This issue has been addressed in the following products:

  Red Hat Enterprise Linux 7

Via RHSA-2018:3157 https://access.redhat.com/errata/RHSA-2018:3157

Comment 13 errata-xmlrpc 2018-11-13 08:35:20 UTC
This issue has been addressed in the following products:

  Red Hat Software Collections for Red Hat Enterprise Linux 6
  Red Hat Software Collections for Red Hat Enterprise Linux 7
  Red Hat Software Collections for Red Hat Enterprise Linux 7.4 EUS
  Red Hat Software Collections for Red Hat Enterprise Linux 7.5 EUS
  Red Hat Software Collections for Red Hat Enterprise Linux 7.6 EUS

Via RHSA-2018:3558 https://access.redhat.com/errata/RHSA-2018:3558


Note You need to log in before you can comment on or make changes to this bug.