1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 04:46:37 +02:00

854 Commits

Author SHA1 Message Date
Sébastien Helleu c6f30816dd tests: increase buffer size for injection of fake IRC message 2026-06-07 08:51:20 +02:00
Sébastien Helleu 03a6d9306a api: fix infinite loop in function string_replace when the search string is empty 2026-06-06 14:19:37 +02:00
Sébastien Helleu 398cfc473a relay: limit size of received websocket frame and HTTP body to prevent memory exhaustion
A relay client could announce a huge websocket frame (or HTTP body via
"Content-Length") and dribble its payload, making WeeChat accumulate it
in a buffer that grew without limit, until all memory was exhausted. The
websocket frame path is reachable before authentication with the
"weechat" and "irc" protocols.

The announced websocket frame length and HTTP "Content-Length" are now
bounded by WEBSOCKET_FRAME_MAX_LENGTH and RELAY_HTTP_BODY_MAX_LENGTH: an
oversized websocket frame closes the connection, and an oversized body is
rejected.
2026-06-06 14:19:17 +02:00
Sébastien Helleu e5df225d9f irc: limit size of data received from the server to prevent memory exhaustion
A malicious or compromised IRC server could send data with no end-of-line
(or a flood of "005" messages), making WeeChat accumulate it in a buffer
that grew without limit, until all memory was exhausted.

The unterminated received message and the accumulated "005" (ISUPPORT)
data are now bounded by IRC_SERVER_RECV_MSG_MAX_LENGTH and
IRC_SERVER_ISUPPORT_MAX_LENGTH: extra data is ignored once the limit is
reached.
2026-06-06 14:17:41 +02:00
Sébastien Helleu 34cbe56a6f relay/irc: fix timing attack on PASS command (GHSA-vhv8-g2r9-cwcc)
The IRC relay protocol's PASS handler compared the server password with
the client-supplied value using strcmp, leaking the password byte-by-byte
via response timing. This is the same class of bug fixed for the api and
weechat protocols, on a separate code path that did not go through
relay_auth_check_password_plain.

Extract the HMAC-then-constant-time-compare logic from
relay_auth_check_password_plain into relay_auth_password_equals, then
use it in both the plain-auth wrapper and the IRC PASS handler.
2026-06-06 14:08:23 +02:00
Sébastien Helleu a17a80f1d0 relay: fix timing attack on password authentication (GHSA-vhv8-g2r9-cwcc)
The relay authentication used non-constant-time comparisons (strcasecmp,
strcmp) to verify password hashes and plaintext passwords, allowing an
attacker to derive the expected hash byte-by-byte from response timing
and then authenticate without knowing the password.

- SHA/PBKDF2 hex hash comparisons: normalize the client-supplied hash to
  uppercase and compare in constant time over the fixed expected length.
- Plaintext password comparison: HMAC-SHA256 both passwords with a fresh
  per-call random key and compare the fixed-size MACs in constant time,
  hiding both per-byte timing and the password length.

Add string_memcmp_constant_time helper in core, exposed via the plugin
API. Bump WEECHAT_PLUGIN_API_VERSION accordingly.
2026-06-06 13:01:52 +02:00
Sébastien Helleu 405707d544 relay: limit size of decompressed websocket frame to prevent memory exhaustion (GHSA-v2v4-45wm-5cr3)
An authenticated relay client using the permessage-deflate websocket
extension could send a small compressed frame that decompresses to an
unbounded amount of data, exhausting all memory and crashing WeeChat.

The output buffer in relay_websocket_inflate is now capped to
WEBSOCKET_INFLATE_MAX_SIZE: frames decompressing beyond this limit are
rejected and the connection is closed.
2026-06-06 12:58:20 +02:00
Sébastien Helleu 42ae480f0a tests: add test with a float number using a lot of decimals in calculation of expression
This test validates the fix made in commit
5b4820ab06 and will prevent regression with such
numbers.
2025-06-07 17:01:11 +02:00
Sébastien Helleu a0ffb9e5dd core, plugins: replace "%p" by "%lx" in calls to sscanf 2025-05-18 22:29:39 +02:00
Sébastien Helleu 95a940294e Revert "core, plugins: replace "%lx" by "%p" in calls to sscanf"
This reverts commit e64ab3c675.

This was causing incorrect conversion of strings "0x..." to pointers on systems
like Solaris/illumos.

And as a side effect, buffers were sometimes empty in weechat relay clients
like glowing-bear.
2025-05-18 22:29:39 +02:00
Sébastien Helleu d49c6515e4 relay/api: use specifier %@ for times formatted by util_strftimeval 2025-05-18 22:23:14 +02:00
Sébastien Helleu 2f375b652b core: add support of specifier %@ for UTC time in function util_strftimeval 2025-05-18 22:23:04 +02:00
Sébastien Helleu 2c0bbdf9b9 core: fix integer overflow in function util_version_number 2025-05-08 19:18:59 +02:00
Sébastien Helleu caa7af253a tests: add tests on function util_strftimeval with microseconds < 0 or > 999999 2025-03-17 08:12:33 +01:00
Sébastien Helleu 9fe5fa23a0 core: convert "long long" to "unsigned long long" in functions util_get_microseconds_string and util_parse_delay 2025-03-16 11:13:25 +01:00
Sébastien Helleu 547e2b934e core: update copyright dates 2025-02-01 23:13:18 +01:00
Sébastien Helleu d302294723 relay/api: always return a body with field "error" in error responses 2025-01-07 07:52:09 +01:00
Sébastien Helleu 60422ca6b1 relay: remove extra space in JSON authentication error 2025-01-07 07:28:45 +01:00
Sébastien Helleu 9d3388b09e relay/api: use cjson lib to return errors 2025-01-07 07:23:55 +01:00
Sébastien Helleu d10af1037b relay/api: use cjson lib to build JSON body of handshake request 2025-01-07 07:18:01 +01:00
Nils c6c420c698 relay: add completion resource 2025-01-05 14:54:07 +01:00
Sébastien Helleu 732f24b6ba core: add command /pipe 2024-12-16 13:39:14 +01:00
Trygve Aaberge 11faf85402 tests: add test for combining request headers 2024-11-24 16:15:35 +01:00
Trygve Aaberge a414fb9da5 tests: add tests for auth via Sec-WebSocket-Protocol 2024-11-24 16:00:25 +01:00
Sébastien Helleu 244595d94f api: add support of flags in functions hook_signal_send and hook_hsignal_send
For now the only supported flag is:

- "stop_on_error": stop execution of callbacks immediately after an
  error (ie return code of callback is WEECHAT_RC_ERROR) and return this code
  (by default execute all callbacks and return the last return code, or return
  WEECHAT_RC_EAT immediately if a callback returns this)

Example:

  hook_signal_send("[flags:stop_on_error]my_signal", WEECHAT_HOOK_SIGNAL_STRING, "test");
2024-11-24 10:29:32 +01:00
Sébastien Helleu 26e16fdea7 tests: add extra tests on function string_split
New tests:

- split empty string
- standard split with only separators in string
- standard split with only separators in string and strip separators
2024-10-21 08:23:55 +02:00
Sébastien Helleu 50a9c88b79 core: check that version is not NULL or empty string in function util_version_number 2024-10-21 08:23:55 +02:00
Sébastien Helleu bca7c7438a api: add special value - (hyphen-minus) in options of function command_options to prevent execution of commands (issue #2199) 2024-10-13 11:15:10 +02:00
Sébastien Helleu ec78084f49 tests: add tests on function input_data 2024-10-12 21:04:13 +02:00
Josh Soref dcd62f7ee6 spelling: shift
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-09-28 21:22:56 +02:00
Josh Soref 7f93f81a82 spelling: separator
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-09-28 21:22:56 +02:00
Josh Soref 87f2bb0a23 spelling: passphrase
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-09-28 21:22:56 +02:00
Josh Soref 9f67ae369c spelling: negotiation
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-09-28 21:22:56 +02:00
Josh Soref 6fdf39165a spelling: client
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-09-28 18:22:41 +02:00
Josh Soref c28696e602 spelling: case-sensitive
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-09-28 18:22:41 +02:00
Josh Soref 0505a0ff76 spelling: case-insensitive
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2024-09-28 18:22:41 +02:00
Sébastien Helleu 6534919868 irc: decode IRC color codes only when displaying messages
Before parsing IRC messages, they were almost all changed to convert IRC color
codes to WeeChat color codes, which caused some bugs when storing data like
account and real names (stored with WeeChat color codes instead of IRC colors).

Now the messages are parsed as-is, then the colors are converted only when
strings are displayed in a buffer by `weechat_printf()`.
2024-09-22 23:05:16 +02:00
Sébastien Helleu 02847246b2 core, plugins, tests: fix octal notation in strings 2024-09-19 08:34:18 +02:00
Sébastien Helleu 1cf65df089 tests: add tests on missing supported IRC messages 2024-09-15 21:47:43 +02:00
Sébastien Helleu 01103cb02a irc: do not strip trailing spaces from incoming IRC messages 2024-09-15 21:47:32 +02:00
Sébastien Helleu 6908eec160 tests: replace POINTERS_EQUAL by STRCMP_EQUAL in string comparisons with NULL 2024-09-14 10:26:42 +02:00
Sébastien Helleu 5f62eb1f2b tests: add tests on function string_rebuild_split_string with empty items 2024-09-07 08:27:26 +02:00
Sébastien Helleu 3253500d15 irc: add option irc.look.notice_nicks_disable_notify 2024-09-02 19:55:27 +02:00
Sébastien Helleu 434c1ee3c4 relay/api: send the sync request at the same time as buffer data retrieval
This fixes events missed by the client when synchronizing after fetching data.
2024-08-25 21:13:38 +02:00
Sébastien Helleu 6bb4d64512 relay/api: allow array with multiple requests in websocket frame received from client 2024-08-25 20:48:52 +02:00
Sébastien Helleu d4ca32832e relay: redefine bar item "input_prompt" to display the connection status on remote buffers, if different from "connected" 2024-08-21 20:37:00 +02:00
Sébastien Helleu a317c785fb relay/api: add automatic reconnection to remote (closes #2166)
New options:

- remote option "autoreconnect_delay"
- relay.api.remote_autoreconnect_delay_growing
- relay.api.remote_autoreconnect_delay_max
2024-08-11 12:18:28 +02:00
Sébastien Helleu 24734c4fe0 relay/api: add field "tmie_displayed" in GET /api/buffers 2024-08-10 13:58:58 +02:00
Sébastien Helleu 41ab22554c tests/relay/api: add missing fields in test of buffer to json function 2024-08-10 13:42:38 +02:00
Sébastien Helleu b00f94dc70 relay/api: add field "hidden" in GET /api/buffers (issue #2159) 2024-08-10 12:42:55 +02:00