Skip to content
  • Blake Burkhart's avatar
    http: limit redirection to protocol-whitelist · f4113cac
    Blake Burkhart authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Previously, libcurl would follow redirection to any protocol
    it was compiled for support with. This is desirable to allow
    redirection from HTTP to HTTPS. However, it would even
    successfully allow redirection from HTTP to SFTP, a protocol
    that git does not otherwise support at all. Furthermore
    git's new protocol-whitelisting could be bypassed by
    following a redirect within the remote helper, as it was
    only enforced at transport selection time.
    
    This patch limits redirects within libcurl to HTTP, HTTPS,
    FTP and FTPS. If there is a protocol-whitelist present, this
    list is limited to those also allowed by the whitelist. As
    redirection happens from within libcurl, it is impossible
    for an HTTP redirect to a protocol implemented within
    another remote helper.
    
    When the curl version git was compiled with is too old to
    support restrictions on protocol redirection, we warn the
    user if GIT_ALLOW_PROTOCOL restrictions were requested. This
    is a little inaccurate, as even without that variable in the
    environment, we would still restrict SFTP, etc, and we do
    not warn in that case. But anything else means we would
    literally warn every time git accesses an http remote.
    
    This commit includes a test, but it is not as robust as we
    would hope. It redirects an http request to ftp, and checks
    that curl complained about the protocol, which means that we
    are relying on curl's specific error message to know what
    happened. Ideally we would redirect to a working ftp server
    and confirm that we can clone without protocol restrictions,
    and not with them. But we do not have a portable way of
    providing an ftp server, nor any other protocol that curl
    supports (https is the closest, but we would have to deal
    with certificates).
    
    [jk: added test and version warning]
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    f4113cac