Skip to content

[Bug]: xquic server doesn't reliably handle randomised CHLO (aka "Chaos Protection") #493

@koujaz

Description

@koujaz

What happened?

When a client tries to establish a connection with CHLO like this one (summary from wireshark):

Initial, DCID=a79a3ca80b9a8a81, PKN: 1, PADDING, PING, PING, PADDING, PING, CRYPTO, CRYPTO, PADDING, CRYPTO, CRYPTO, PADDING, CRYPTO, CRYPTO, PADDING

The xquic server fails to process the connection and in the log you will find:

[error] |scid:_|xqc_process_ping_frame|xqc_process_ping_frame error: ping frame shoud not be the first frame|
[error] |scid:_|xqc_process_frames|process frame error|-1|
[error] |scid:_|xqc_packet_decrypt_single|xqc_process_frames error|-1|
[error] |scid:_|xqc_conn_process_packet|process packets err|ret:-1|pos:00007FFF93B9F017|buf:00007FFF93B9F5C0|buf_size:1350| 
[error] |xqc_engine_packet_process|fail to process packets|conn:_|ret:-1|

Note the frames in CHLO are deliberately randomised and out-of-order (this is known as "chaos protection" https://quiche.googlesource.com/quiche/+/cb6b51054274cb2c939264faf34a1776e0a5bab7) but they make a valid QUIC packet.
Note xquic has built in some assumptions which seem unnecessary:

"|xqc_process_ping_frame error: ping frame shoud not be the first frame|");

Steps To Reproduce

Take a client with "chaos protection" enabled (for example Google Quiche) and run connections against xquic server. In some cases the connection fails as described here.

Relevant log output

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions