diff --git a/CHANGELOG.md b/CHANGELOG.md index 15b25a4c38..d4201950d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. +## [4.5.11] - 2026-06-03 + +### Security + +- Fix allowed attribution domains spoofing ([GHSA-rwcw-vq68-g34p](https://github.com/mastodon/mastodon/security/advisories/GHSA-rwcw-vq68-g34p)) +- Fix uncaught exception in message sanitization causing Denial of Service ([GHSA-qrgq-9fx2-vf2r](https://github.com/mastodon/mastodon/security/advisories/GHSA-qrgq-9fx2-vf2r)) +- Update dependencies + +### Fixed + +- Fix remote statuses with large media descriptions being rejected (#39135 by @ClearlyClaire) + ## [4.5.10] - 2026-05-20 ### Security diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index d4b38162a8..d027c0c3a7 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -150,7 +150,7 @@ class ActivityPub::ProcessAccountService < BaseService @account.show_featured = @json['showFeatured'] if @json.key?('showFeatured') @account.show_media = @json['showMedia'] if @json.key?('showMedia') @account.show_media_replies = @json['showRepliesInMedia'] if @json.key?('showRepliesInMedia') - @account.attribution_domains = as_array(@json['attributionDomains'] || []).take(Account::ATTRIBUTION_DOMAINS_HARD_LIMIT).filter { |item| item.is_a?(String) } + @account.attribution_domains = as_array(@json['attributionDomains'] || []).take(Account::ATTRIBUTION_DOMAINS_HARD_LIMIT).grep(String) end def set_fetchable_key! diff --git a/docker-compose.yml b/docker-compose.yml index 35d08b8996..14998d6e82 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,7 +59,7 @@ services: web: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes # build: . - image: ghcr.io/mastodon/mastodon:v4.5.10 + image: ghcr.io/mastodon/mastodon:v4.5.11 restart: always env_file: .env.production command: bundle exec puma -C config/puma.rb @@ -83,7 +83,7 @@ services: # build: # dockerfile: ./streaming/Dockerfile # context: . - image: ghcr.io/mastodon/mastodon-streaming:v4.5.10 + image: ghcr.io/mastodon/mastodon-streaming:v4.5.11 restart: always env_file: .env.production command: node ./streaming/index.js @@ -102,7 +102,7 @@ services: sidekiq: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes # build: . - image: ghcr.io/mastodon/mastodon:v4.5.10 + image: ghcr.io/mastodon/mastodon:v4.5.11 restart: always env_file: .env.production command: bundle exec sidekiq diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 6d5353eefc..711cf06739 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -17,7 +17,7 @@ module Mastodon end def default_prerelease - 'alpha.8' + 'alpha.9' end def prerelease diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb index 3c3d697eda..618722bcae 100644 --- a/lib/sanitize_ext/sanitize_config.rb +++ b/lib/sanitize_ext/sanitize_config.rb @@ -83,6 +83,7 @@ class Sanitize # next, we find the plain-text description is_annotation_with_encoding = lambda do |encoding, node| return false unless node.name == 'annotation' + encoding_attr = node.attributes['encoding'] return false if encoding_attr.nil?