Synapse is a Matrix reference homeserver written in python (pypi package matrix-synapse). Matrix is an ecosystem for open federated Instant Messaging and VoIP. In Synapse before version 1.33.2 Push rules can specify conditions under which they will match, including event_match
, which matches event content against a pattern including wildcards. Certain patterns can cause very poor performance in the matching engine, leading to a denial-of-service when processing moderate length events. The issue is patched in version 1.33.2. A potential workaround might be to prevent users from making custom push rules, by blocking such requests at a reverse-proxy.
The product does not properly control the allocation and maintenance of a limited resource.
Name | Vendor | Start Version | End Version |
---|---|---|---|
Synapse | Matrix | * | 1.33.2 (excluding) |
Matrix-synapse | Ubuntu | bionic | * |
Matrix-synapse | Ubuntu | esm-apps/bionic | * |
Matrix-synapse | Ubuntu | esm-apps/focal | * |
Matrix-synapse | Ubuntu | esm-apps/jammy | * |
Matrix-synapse | Ubuntu | focal | * |
Matrix-synapse | Ubuntu | groovy | * |
Matrix-synapse | Ubuntu | hirsute | * |
Matrix-synapse | Ubuntu | impish | * |
Matrix-synapse | Ubuntu | jammy | * |
Matrix-synapse | Ubuntu | kinetic | * |
Matrix-synapse | Ubuntu | trusty | * |
Matrix-synapse | Ubuntu | upstream | * |
Matrix-synapse | Ubuntu | xenial | * |
Mitigation of resource exhaustion attacks requires that the target system either:
The first of these solutions is an issue in itself though, since it may allow attackers to prevent the use of the system by a particular valid user. If the attacker impersonates the valid user, they may be able to prevent the user from accessing the server in question.
The second solution is simply difficult to effectively institute – and even when properly done, it does not provide a full solution. It simply makes the attack require more resources on the part of the attacker.