ftp,imap,pop3: do not ignore --ssl-reqd

In imap and pop3, check if TLS is required even when capabilities
request has failed.

In ftp, ignore preauthentication (230 status of server greeting) if TLS
is required.

Bug: https://curl.se/docs/CVE-2021-22946.html

CVE-2021-22946
This commit is contained in:
Patrick Monnerat 2021-09-08 11:56:22 +02:00 committed by Daniel Stenberg
parent 43157490a5
commit 364f174724
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
7 changed files with 195 additions and 36 deletions

View file

@ -118,6 +118,8 @@ test954 test955 test956 test957 test958 test959 test960 test961 test962 \
test963 test964 test965 test966 test967 test968 test969 test970 test971 \
test972 \
\
test984 test985 test986 \
\
test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
test1016 test1017 test1018 test1019 test1020 test1021 test1022 test1023 \

56
tests/data/test984 Normal file
View file

@ -0,0 +1,56 @@
<testcase>
<info>
<keywords>
IMAP
STARTTLS
</keywords>
</info>
#
# Server-side
<reply>
<servercmd>
REPLY CAPABILITY A001 BAD Not implemented
</servercmd>
</reply>
#
# Client-side
<client>
<features>
SSL
</features>
<server>
imap
</server>
<name>
IMAP require STARTTLS with failing capabilities
</name>
<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -u user:secret --ssl-reqd
</command>
<file name="log/upload%TESTNUMBER">
Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
From: Fred Foobar <foobar@example.COM>
Subject: afternoon meeting
To: joe@example.com
Message-Id: <B27397-0100000@example.COM>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Hello Joe, do you think we can meet at 3:30 tomorrow?
</file>
</client>
#
# Verify data after the test has been "shot"
<verify>
# 64 is CURLE_USE_SSL_FAILED
<errorcode>
64
</errorcode>
<protocol>
A001 CAPABILITY
</protocol>
</verify>
</testcase>

54
tests/data/test985 Normal file
View file

@ -0,0 +1,54 @@
<testcase>
<info>
<keywords>
POP3
STARTTLS
</keywords>
</info>
#
# Server-side
<reply>
<servercmd>
REPLY CAPA -ERR Not implemented
</servercmd>
<data nocheck="yes">
From: me@somewhere
To: fake@nowhere
body
--
yours sincerely
</data>
</reply>
#
# Client-side
<client>
<features>
SSL
</features>
<server>
pop3
</server>
<name>
POP3 require STARTTLS with failing capabilities
</name>
<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret --ssl-reqd
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
# 64 is CURLE_USE_SSL_FAILED
<errorcode>
64
</errorcode>
<protocol>
CAPA
</protocol>
</verify>
</testcase>

53
tests/data/test986 Normal file
View file

@ -0,0 +1,53 @@
<testcase>
<info>
<keywords>
FTP
STARTTLS
</keywords>
</info>
#
# Server-side
<reply>
<servercmd>
REPLY welcome 230 Welcome
REPLY AUTH 500 unknown command
</servercmd>
</reply>
# Client-side
<client>
<features>
SSL
</features>
<server>
ftp
</server>
<name>
FTP require STARTTLS while preauthenticated
</name>
<file name="log/test%TESTNUMBER.txt">
data
to
see
that FTPS
works
so does it?
</file>
<command>
--ssl-reqd --ftp-ssl-control ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt -u user:secret
</command>
</client>
# Verify data after the test has been "shot"
<verify>
# 64 is CURLE_USE_SSL_FAILED
<errorcode>
64
</errorcode>
<protocol>
AUTH SSL
AUTH TLS
</protocol>
</verify>
</testcase>