Description:
This update for mosquitto fixes the following issues:
- Update to latest release to address the following security
issues:
* CVE-2024-3935 (boo#1232635)
* CVE-2024-10525 (boo#1232636)
Update to version 2.0.20
Broker:
- Fix QoS 1 / QoS 2 publish incorrectly returning
"no subscribers".
- Don't allow invalid response topic values.
- Fix some strict protocol compliance issues.
Update to version 2.0.19
Security:
* Fix mismatched subscribe/unsubscribe with normal/shared topics.
* Fix crash on bridge using remapped topic being sent a crafted
packet.
Broker:
* Fix assert failure when loading a persistence file that
contains subscriptions with no client id.
* Fix local bridges being incorrectly expired when
persistent_client_expiration is in use.
* Fix use of CLOCK_BOOTTIME for getting time.
* Fix mismatched subscribe/unsubscribe with normal/shared topics.
* Fix crash on bridge using remapped topic being sent a crafted
packet.
Client library:
* Fix some error codes being converted to string as "unknown".
* Clear SSL error state to avoid spurious error reporting.
* Fix "payload format invalid" not being allowed as a PUBREC
reason code.
* Don't allow SUBACK with missing reason codes.
Update to 2.0.18 (boo#1214918, CVE-2023-28366, boo#1215865,
CVE-2023-0809, boo#1215864, CVE-2023-3592):
* Fix crash on subscribe under certain unlikely conditions.
* Fix mosquitto_rr not honouring `-R`. Closes #2893.
* Fix `max_queued_messages 0` stopping clients from receiving
messages.
* Fix `max_inflight_messages` not being set correctly.
* Fix `mosquitto_passwd -U` backup file creation.
* CVE-2023-28366: Fix memory leak in broker when clients send
multiple QoS 2 messages with the same message ID, but then
never respond to the PUBREC commands.
* CVE-2023-0809: Fix excessive memory being allocated based on
malicious initial packets that are not CONNECT packets.
* CVE-2023-3592: Fix memory leak when clients send v5 CONNECT
packets with a will message that contains invalid property
types.
* Broker will now reject Will messages that attempt to publish
to $CONTROL/.
* Broker now validates usernames provided in a TLS certificate
or TLS-PSK identity are valid UTF-8.
* Fix potential crash when loading invalid persistence file.
* Library will no longer allow single level wildcard
certificates, e.g. *.com
* Fix $SYS messages being expired after 60 seconds and hence
unchanged values disappearing.
* Fix some retained topic memory not being cleared immediately
after used.
* Fix error handling related to the `bind_interface` option.
* Fix std* files not being redirected when daemonising, when
built with assertions removed.
* Fix default settings incorrectly allowing TLS v1.1.
* Use line buffered mode for stdout.
* Fix bridges with non-matching cleansession/local_cleansession
being expired on start after restoring from persistence
* Fix connections being limited to 2048 on Windows. The limit
is now 8192, where supported.
* Broker will log warnings if sensitive files are world
readable/writable, or if the owner/group is not the same as
the user/group the broker is running as. In future versions
the broker will refuse to open these files.
* mosquitto_memcmp_const is now more constant time.
* Only register with DLT if DLT logging is enabled.
* Fix any possible case where a json string might be
incorrectly loaded. This could have caused a crash if a
textname or textdescription field of a role was not a string,
when loading the dynsec config from file only.
* Dynsec plugin will not allow duplicate clients/groups/roles
when loading config from file, which matches the behaviour
for when creating them.
* Fix heap overflow when reading corrupt config with "log_dest
file".
* Use CLOCK_BOOTTIME when available, to keep track of time.
This solves the problem of the client OS sleeping and the
client hence not being able to calculate the actual time for
keepalive purposes.
* Fix default settings incorrectly allowing TLS v1.1. Closes
* Fix high CPU use on slow TLS connect.
* Fix incorrect topic-alias property value in mosquitto_sub
json output.
* Fix confusing message on TLS certificate verification.
* mosquitto_passwd uses mkstemp() for backup files.
* `mosquitto_ctrl dynsec init` will refuse to overwrite an
existing file, without a race-condition.
Update to 2.0.15:
* Deleting the group configured as the anonymous group in the Dynamic Security
plugin, would leave a dangling pointer that could lead to a single crash.
This is considered a minor issue - only administrative users should have
access to dynsec, the impact on availability is one-off, and there is no
associated loss of data. It is now forbidden to delete the group configured
as the anonymous group.
* Fix memory leak when a plugin modifies the topic of a message in
MOSQ_EVT_MESSAGE.
* Fix bridge `restart_timeout` not being honoured.
* Fix potential memory leaks if a plugin modifies the message in the
MOSQ_EVT_MESSAGE event.
* Fix unused flags in CONNECT command being forced to be 0, which is not
required for MQTT v3.1. Closes #2522.
* Improve documentation of `persistent_client_expiration` option.
Closes #2404.
* Add clients to session expiry check list when restarting and reloading from
persistence. Closes #2546.
* Fix bridges not sending failure notification messages to the local broker if
the remote bridge connection fails. Closes #2467. Closes #1488.
* Fix some PUBLISH messages not being counted in $SYS stats. Closes #2448.
* Fix incorrect return code being sent in DISCONNECT when a client session is
taken over. Closes #2607.
* Fix confusing "out of memory" error when a client is kicked in the dynamic
security plugin. Closes #2525.
* Fix confusing error message when dynamic security config file was a
directory. Closes #2520.
* Fix bridge queued messages not being persisted when local_cleansession is
set to false and cleansession is set to true. Closes #2604.
* Dynamic security: Fix modifyClient and modifyGroup commands to not modify
the client/group if a new group/client being added is not valid.
* Dynamic security: Fix the plugin being able to be loaded twice. Currently
only a single plugin can interact with a unique $CONTROL topic. Using
multiple instances of the plugin would produce duplicate entries in the
config file. Closes #2601. Closes #2470.
* Fix case where expired messages were causing queued messages not to be
delivered. Closes #2609.
* Fix websockets not passing on the X-Forwarded-For header.
* Fix use of `MOSQ_OPT_TLS_ENGINE` being unable to be used due to the openssl
ctx not being initialised until starting to connect. Closes #2537.
* Fix incorrect use of SSL_connect. Closes #2594.
* Don't set SIGPIPE to ignore, use MSG_NOSIGNAL instead. Closes #2564.
* Add documentation of struct mosquitto_message to header. Closes #2561.
* Fix documentation omission around mosquitto_reinitialise. Closes #2489.
* Fix use of MOSQ_OPT_SSL_CTX when used in conjunction with
MOSQ_OPT_SSL_CTX_DEFAULTS. Closes #2463.
* Fix failure to close thread in some situations. Closes #2545.
* Fix mosquitto_pub incorrectly reusing topic aliases when reconnecting.
* Fix `-o` not working in `mosquitto_ctrl`, and typo in related documentation.
Update to version 2.0.14:
Broker:
* Fix bridge not respecting receive-maximum when reconnecting
with MQTT v5.
Client library:
* Fix mosquitto_topic_matches_sub2() not using the length
parameters.
* Fix incorrect subscribe_callback in mosquittopp.h.
Update to version 2.0.13:
Broker:
* Fix `max_keepalive` option not being able to be set to 0.
* Fix LWT messages not being delivered if `per_listener_settings`
was set to true.
* Various fixes around inflight quota management.
* Fix problem parsing config files with Windows line endings.
* Don't send retained messages when a shared subscription is made
* Fix client id not showing in log on failed connections, where
possible.
* Fix broker sending duplicate CONNACK on failed MQTT v5
reauthentication.
* Fix mosquitto_plugin.h not including mosquitto_broker.h.
Client library:
* Initialise sockpairR/W to invalid in `mosquitto_reinitialise()`
to avoid closing invalid sockets in `mosquitto_destroy()` on
error.
Clients:
- Fix date format in mosquitto_sub output.
- Update to version 2.0.12
* Includes security fixes for
CVE-2021-34434 (boo#1190048) and CVE-2020-13849 (boo#1190101)
Security :
* An MQTT v5 client connecting with a large number of
user-property properties could cause excessive CPU usage,
leading to a loss of performance and possible denial of
service. This has been fixed.
* Fix `max_keepalive` not applying to MQTT v3.1.1 and v3.1
connections. These clients are now rejected if their keepalive
value exceeds max_keepalive. This option allows CVE-2020-13849,
which is for the MQTT v3.1.1 protocol itself rather than an
implementation, to be addressed.
* Using certain listener related configuration options e.g.
`cafile`, that apply to the default listener without defining
any listener would cause a remotely accessible listener to be
opened that was not confined to the local machine but did have
anonymous access enabled, contrary to the documentation.
This has been fixed. Closes #2283.
* CVE-2021-34434: If a plugin had granted ACL subscription access
to a durable/non-clean-session client, then removed that
access,the client would keep its existing subscription. This
has been fixed.
* Incoming QoS 2 messages that had not completed the QoS flow
were not being checked for ACL access when a clean
session=False client was reconnecting. This has been fixed.
Broker:
* Fix possible out of bounds memory reads when reading a
corrupt/crafted configuration file. Unless your configuration
file is writable by untrusted users this is not a risk.
* Fix `max_connections` option not being correctly counted.
* Fix TLS certificates and TLS-PSK not being able to be
configured at the same time.
* Disable TLS v1.3 when using TLS-PSK, because it isn't correctly
configured.
* Fix `max_keepalive` not applying to MQTT v3.1.1 and v3.1
connections. These clients are now rejected if their keepalive
value exceeds max_keepalive.
* Fix broker not quiting if e.g. the `password_file` is specified
as a directory. Closes #2241.
* Fix listener mount_point not being removed on outgoing messages.
* Strict protocol compliance fixes, plus test suite.
* Fix $share subscriptions not being recovered for durable
clients that reconnect.
* Update plugin configuration documentation. Closes #2286.
Client library:
* If a client uses TLS-PSK then force the default cipher list to
use "PSK" ciphers only. This means that a client connecting to
a broker configured with x509 certificates only will now fail.
Prior to this, the client would connect successfully without#
verifying certificates, because they were not configured.
* Disable TLS v1.3 when using TLS-PSK, because it isn't correctly
configured.
* Threaded mode is deconfigured when the mosquitto_loop_start()
thread ends, which allows mosquitto_loop_start() to be called
again.
* Fix MOSQ_OPT_SSL_CTX not being able to be set to NULL.
* Fix reconnecting failing when MOSQ_OPT_TLS_USE_OS_CERTS was in
use, but none of capath, cafile, psk, nor MOSQ_OPT_SSL_CTX were
set, and MOSQ_OPT_SSL_CTX_WITH_DEFAULTS was set to the default
value of true.
Apps:
* Fix `mosquitto_ctrl dynsec setDefaultACLAccess` command not
working.
Clients:
* Document TLS certificate behaviour when using `-p 8883`.
Build:
* Fix installation using WITH_TLS=no. Closes #2281.
* Fix builds with libressl 3.4.0. Closes #2198.
* Remove some unnecessary code guards related to libressl.
* Fix printf format build warning on MIPS. Closes #2271.
Update to version 2.0.11:
Security:
* If a MQTT v5 client connects with a crafted CONNECT packet a
memory leak will occur. This has been fixed.
Broker:
* Fix possible crash having just upgraded from 1.6 if
`per_listener_settings true` is set, and a SIGHUP is sent to
the broker before a client has reconnected to the broker.
* Fix bridge not reconnectng if the first reconnection attempt
fails.
* Improve QoS 0 outgoing packet queueing.
* Fix QoS 0 messages not being queued when `queue_qos0_messages`
was enabled.
Clients:
* If sending mosquitto_sub output to a pipe, mosquitto_sub will
now detect that the pipe has closed and disconnect.
* Fix `mosquitto_pub -l` quitting if a message publication is
attempted when the broker is temporarily unavailable.