Summary
Archive extraction paths load the entire zip into memory and decode without limits on:
- compressed / uncompressed size
- number of entries
- compression ratio (zip bomb)
Comment in code references Issue #242 (path traversal — closed), but zip-bomb protection was not implemented.
Affected code
lib/core/market/http_marketplace_repository.dart (readAsBytes + ZipDecoder().decodeBytes)
lib/core/extensions/local_extension_installer.dart
lib/core/updater/installers/update_install_utils.dart
Proposed fix
Introduce shared SafeZipExtractor (or similar) with configurable limits, e.g.:
- max compressed bytes read
- max total uncompressed bytes
- max file count
- max per-entry uncompressed size
- max compression ratio
Stream or bound reads where possible; fail closed with MarketplaceException / AppUpdaterException.
Acceptance criteria
Severity
Medium — DoS (memory exhaustion) via malicious or compromised extension/update archive.
Related
Summary
Archive extraction paths load the entire zip into memory and decode without limits on:
Comment in code references Issue #242 (path traversal — closed), but zip-bomb protection was not implemented.
Affected code
lib/core/market/http_marketplace_repository.dart(readAsBytes+ZipDecoder().decodeBytes)lib/core/extensions/local_extension_installer.dartlib/core/updater/installers/update_install_utils.dartProposed fix
Introduce shared
SafeZipExtractor(or similar) with configurable limits, e.g.:Stream or bound reads where possible; fail closed with
MarketplaceException/AppUpdaterException.Acceptance criteria
docs/security.mdor marketplace docs.Severity
Medium — DoS (memory exhaustion) via malicious or compromised extension/update archive.
Related