Skip to content

Commit a88c593

Browse files
committed
gossip: fix DoS with malformed UDP header value/size
credits for finding this to Immunefi user `@bpop23293`
1 parent b2365c8 commit a88c593

File tree

6 files changed

+111
-102
lines changed

6 files changed

+111
-102
lines changed

book/api/metrics-generated.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,7 @@
944944
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;count</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">success_&#8203;prune</span>"} | counter | (Prune (success)) |
945945
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;count</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">success_&#8203;ping</span>"} | counter | (Ping (success)) |
946946
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;count</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">success_&#8203;pong</span>"} | counter | (Pong (success)) |
947+
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;count</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;malformed_&#8203;packet</span>"} | counter | (Invalid UDP header values/size) |
947948
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;count</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;unparseable</span>"} | counter | (Unparseable) |
948949
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;count</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;pull_&#8203;request_&#8203;not_&#8203;contact_&#8203;info</span>"} | counter | (Pull Request (not contact info)) |
949950
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;count</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;pull_&#8203;request_&#8203;loopback</span>"} | counter | (Pull Request (loopback)) |
@@ -964,6 +965,7 @@
964965
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;bytes</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">success_&#8203;prune</span>"} | counter | (Prune (success)) |
965966
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;bytes</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">success_&#8203;ping</span>"} | counter | (Ping (success)) |
966967
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;bytes</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">success_&#8203;pong</span>"} | counter | (Pong (success)) |
968+
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;bytes</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;malformed_&#8203;packet</span>"} | counter | (Invalid UDP header values/size) |
967969
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;bytes</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;unparseable</span>"} | counter | (Unparseable) |
968970
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;bytes</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;pull_&#8203;request_&#8203;not_&#8203;contact_&#8203;info</span>"} | counter | (Pull Request (not contact info)) |
969971
| <span class="metrics-name">gossvf_&#8203;message_&#8203;rx_&#8203;bytes</span><br/>{gossvf_&#8203;message_&#8203;outcome="<span class="metrics-enum">dropped_&#8203;pull_&#8203;request_&#8203;loopback</span>"} | counter | (Pull Request (loopback)) |

src/disco/metrics/generated/fd_metrics_enums.h

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@
675675
#define FD_METRICS_ENUM_GOSSIP_CRDS_OUTCOME_V_DROPPED_PUSH_DUPLICATE_NAME "dropped_push_duplicate"
676676

677677
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_NAME "gossvf_message_outcome"
678-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_CNT (20UL)
678+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_CNT (21UL)
679679
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_SUCCESS_PULL_REQUEST_IDX 0
680680
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_SUCCESS_PULL_REQUEST_NAME "success_pull_request"
681681
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_SUCCESS_PULL_RESPONSE_IDX 1
@@ -688,33 +688,35 @@
688688
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_SUCCESS_PING_NAME "success_ping"
689689
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_SUCCESS_PONG_IDX 5
690690
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_SUCCESS_PONG_NAME "success_pong"
691-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_UNPARSEABLE_IDX 6
691+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_MALFORMED_PACKET_IDX 6
692+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_MALFORMED_PACKET_NAME "dropped_malformed_packet"
693+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_UNPARSEABLE_IDX 7
692694
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_UNPARSEABLE_NAME "dropped_unparseable"
693-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_NOT_CONTACT_INFO_IDX 7
695+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_NOT_CONTACT_INFO_IDX 8
694696
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_NOT_CONTACT_INFO_NAME "dropped_pull_request_not_contact_info"
695-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_LOOPBACK_IDX 8
697+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_LOOPBACK_IDX 9
696698
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_LOOPBACK_NAME "dropped_pull_request_loopback"
697-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_INACTIVE_IDX 9
699+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_INACTIVE_IDX 10
698700
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_INACTIVE_NAME "dropped_pull_request_inactive"
699-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_WALLCLOCK_IDX 10
701+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_WALLCLOCK_IDX 11
700702
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_WALLCLOCK_NAME "dropped_pull_request_wallclock"
701-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_SIGNATURE_IDX 11
703+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_SIGNATURE_IDX 12
702704
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_SIGNATURE_NAME "dropped_pull_request_signature"
703-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_SHRED_VERSION_IDX 12
705+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_SHRED_VERSION_IDX 13
704706
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_REQUEST_SHRED_VERSION_NAME "dropped_pull_request_shred_version"
705-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_DESTINATION_IDX 13
707+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_DESTINATION_IDX 14
706708
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_DESTINATION_NAME "dropped_prune_destination"
707-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_WALLCLOCK_IDX 14
709+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_WALLCLOCK_IDX 15
708710
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_WALLCLOCK_NAME "dropped_prune_wallclock"
709-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_SIGNATURE_IDX 15
711+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_SIGNATURE_IDX 16
710712
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PRUNE_SIGNATURE_NAME "dropped_prune_signature"
711-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PUSH_NO_VALID_CRDS_IDX 16
713+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PUSH_NO_VALID_CRDS_IDX 17
712714
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PUSH_NO_VALID_CRDS_NAME "dropped_push_no_valid_crds"
713-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_RESPONSE_NO_VALID_CRDS_IDX 17
715+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_RESPONSE_NO_VALID_CRDS_IDX 18
714716
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PULL_RESPONSE_NO_VALID_CRDS_NAME "dropped_pull_response_no_valid_crds"
715-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PING_SIGNATURE_IDX 18
717+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PING_SIGNATURE_IDX 19
716718
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PING_SIGNATURE_NAME "dropped_ping_signature"
717-
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PONG_SIGNATURE_IDX 19
719+
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PONG_SIGNATURE_IDX 20
718720
#define FD_METRICS_ENUM_GOSSVF_MESSAGE_OUTCOME_V_DROPPED_PONG_SIGNATURE_NAME "dropped_pong_signature"
719721

720722
#define FD_METRICS_ENUM_GOSSVF_CRDS_OUTCOME_NAME "gossvf_crds_outcome"

src/disco/metrics/generated/fd_metrics_gossvf.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const fd_metrics_meta_t FD_METRICS_GOSSVF[FD_METRICS_GOSSVF_TOTAL] = {
88
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_COUNT, COUNTER, GOSSVF_MESSAGE_OUTCOME, SUCCESS_PRUNE ),
99
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_COUNT, COUNTER, GOSSVF_MESSAGE_OUTCOME, SUCCESS_PING ),
1010
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_COUNT, COUNTER, GOSSVF_MESSAGE_OUTCOME, SUCCESS_PONG ),
11+
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_COUNT, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_MALFORMED_PACKET ),
1112
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_COUNT, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_UNPARSEABLE ),
1213
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_COUNT, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_PULL_REQUEST_NOT_CONTACT_INFO ),
1314
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_COUNT, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_PULL_REQUEST_LOOPBACK ),
@@ -28,6 +29,7 @@ const fd_metrics_meta_t FD_METRICS_GOSSVF[FD_METRICS_GOSSVF_TOTAL] = {
2829
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_BYTES, COUNTER, GOSSVF_MESSAGE_OUTCOME, SUCCESS_PRUNE ),
2930
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_BYTES, COUNTER, GOSSVF_MESSAGE_OUTCOME, SUCCESS_PING ),
3031
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_BYTES, COUNTER, GOSSVF_MESSAGE_OUTCOME, SUCCESS_PONG ),
32+
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_BYTES, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_MALFORMED_PACKET ),
3133
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_BYTES, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_UNPARSEABLE ),
3234
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_BYTES, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_PULL_REQUEST_NOT_CONTACT_INFO ),
3335
DECLARE_METRIC_ENUM( GOSSVF_MESSAGE_RX_BYTES, COUNTER, GOSSVF_MESSAGE_OUTCOME, DROPPED_PULL_REQUEST_LOOPBACK ),

0 commit comments

Comments
 (0)