Skip to main content

Gathers information on a zip, mainly for seeing wether the zip could be considered malicious (Zipbomb, travelsal etc.). Work in progress.

Reason this release was yanked:

Name change to DefuseZip due commercial product of the same name.

Project description

SecureZip

Table of contents

Description / General info

I couldn't find an opensource ZipBomb blocker, so this is my attempt at making one.

It is a work in progress, but the scan feature is usable and safe_extract works for linux.

DO NOT EXTRACT THE EXAMPLE ZIPS! It will make you sad. No one wants you to be sad.

They are malicious by intent and only for testing purposes.

Installation:

pip install SecureZip

Usage:

SecureZip.Loader parameters:

  • [REQUIRED] zip_file: Path to zip
  • [OPTIONAL] ratio_threshold: compression ratio threshold when to rule the zip malicious. Default = 1032
  • [OPTIONAL] nested_zips_limit: Total zip count when to abort and rule the zip malicious. Default = 3
  • [OPTIONAL] nested_levels_limit: Limit when to abort travelling the zips and rule the zip malicious. Default = 2
  • [OPTIONAL] killswitch_seconds: Seconds to allow traversing the zip. After the limit is hit, zip is ruled malicious. Default = 1
  • [OPTIONAL] symlinks_allowed: Boolean. Default = False
  • [OPTIONAL] directory_travelsal_allowed: Boolean. Default = False

Loader methods:

  • is_dangerous() -> bool
  • has_travelsal() -> bool
  • has_links() -> bool
from pathlib import Path
import SecureZip

file = Path('myzip.zip')
zip = SecureZip.Loader(zip_file=file)
if zip.scan() and zip.get_compression_ratio() > 1032:
    print(zip.output())
else:
    #do something with the zip
from pathlib import Path
import SecureZip

file = Path('myzip.zip')
zip = SecureZip.Loader(zip_file=file)
zip.scan() # Returns true when zip should be considered malicious
if zip.is_dangerous(): # Returns true when zip should be considered malicious
    do stuff

Example output from output() after calling scan() -> bool

  • Single file in zip

      Dangerous: False
      Message = Success
      Compression Ratio = 0.77 Uncompressed size: 907.00 bytes Compressed size: 1.16 kilobytes
      Nested zips = 0
      Nest Levels = 0
      Symlinks = False
    
  • Double nested zips -- with maximum nesting set to 4 : SecureZip.Loader(..., nested_zips_limit=4)

      Dangerous: True
      Message = Success
      Compression Ratio = 0.58 Uncompressed size: 922.00 bytes Compressed size: 1.55 kilobytes
      Nested zips = 5
      Nest Levels = 2
      Symlinks = False
    
  • 97tb / 14,5kb zipbomb -- with 5s killswitch enabled to prevent long scan time : SecureZip.Loader(..., killswitch_seconds=5)

      Dangerous: True
      Message = Killswitch enabled due to too deep recursion or timeout, values collected are valid only to that point
      Compression Ratio = 125869951.52 Uncompressed size: 1.69 terabytes Compressed size: 14.45 kilobytes
      Nested zips = 1930
      Nest Levels = 100
      Symlinks = False
    
  • 4.5pb / 46mb BAMSOFTWARE zbxl FLAT zipbomb

      Dangerous: True
      Message = Success
      Compression Ratio = 98262444.02 Uncompressed size: 4.00 petabytes Compressed size: 43.75 megabytes
      Nested zips = 0
      Nest Levels = 0
      Symlinks = False
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

SecureZip-0.0.1.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

SecureZip-0.0.1-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file SecureZip-0.0.1.tar.gz.

File metadata

  • Download URL: SecureZip-0.0.1.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.21.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.5

File hashes

Hashes for SecureZip-0.0.1.tar.gz
Algorithm Hash digest
SHA256 6455bce0864104a18ffacd748a58b39f4b91f5fd0c62af5019db5116db77bb1b
MD5 c272e878d5925cbcccce873ce332a93b
BLAKE2b-256 21419fffdf760b154efcfa848eea0f749012c5efe19475b5ee7d430026834fb0

See more details on using hashes here.

File details

Details for the file SecureZip-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: SecureZip-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.21.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.7.5

File hashes

Hashes for SecureZip-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7d83732291636088831a56085fe5994d49f1004240d1c707330e9e212d07c2f6
MD5 b399e2696d29df7597375521fb49fe90
BLAKE2b-256 b3424b4021bd6b221257c584fec5e45ef32b1e338f7edff0a698b960daa668d7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page