Skip to main content

A static analyzer and interpreter for Python pickle data

Project description

Fickling

Fickling is a decompiler, static analyzer, and bytecode rewriter for Python pickle object serializations.

Pickled Python objects are in fact bytecode that is interpreted by a stack-based virtual machine built into Python called the "Pickle Machine". Fickling can take pickled data streams and decompile them into human-readable Python code that, when executed, will deserialize to the original serialized object.

The authors do not prescribe any meaning to the “F” in Fickling; it could stand for “fickle,” … or something else. Divining its meaning is a personal journey in discretion and is left as an exercise to the reader.

Learn more about it in our blog post and DEF CON 2021 talk.

Installation

Fickling has been tested on Python 3.8 through Python 3.11 and has very few dependencies. It can be installed through pip:

python -m pip install fickling

This installs both the library and the command line utility.

Usage

Fickling can be run programmatically:

>>> import ast
>>> import pickle
>>> from fickling.pickle import Pickled
>>> print(ast.dump(Pickled.load(pickle.dumps([1, 2, 3, 4])).ast, indent=4))
Module(
    body=[
        Assign(
            targets=[
                Name(id='result', ctx=Store())],
            value=List(
                elts=[
                    Constant(value=1),
                    Constant(value=2),
                    Constant(value=3),
                    Constant(value=4)],
                ctx=Load()))])

Fickling can also be run as a command line utility:

$ fickling pickled.data
result = [1, 2, 3, 4]

This is of course a simple example. However, Python pickle bytecode can run arbitrary Python commands (such as exec or os.system) so it is a security risk to unpickle untrusted data. You can test for common patterns of malicious pickle files with the --check-safety option:

$ fickling --check-safety pickled.data
Warning: Fickling failed to detect any overtly unsafe code, but the pickle file may still be unsafe.
Do not unpickle this file if it is from an untrusted source!

You can also safely trace the execution of the Pickle virtual machine without exercising any malicious code with the --trace option.

Finally, you can inject arbitrary Python code that will be run on unpickling into an existing pickle file with the --inject option.

License

This utility was developed by Trail of Bits. It is licensed under the GNU Lesser General Public License v3.0. Contact us if you're looking for an exception to the terms.

© 2021, Trail of Bits.

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

fickling-0.0.7.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

fickling-0.0.7-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

Details for the file fickling-0.0.7.tar.gz.

File metadata

  • Download URL: fickling-0.0.7.tar.gz
  • Upload date:
  • Size: 21.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for fickling-0.0.7.tar.gz
Algorithm Hash digest
SHA256 7d80918d08fe254a18a09f4adea566a44b3e6164bcfe44f302f2c2e6d61f8f8d
MD5 114edfb873d8d5f249678276af8e15d5
BLAKE2b-256 8927f2dfe322eddfb670d32ee838a65d4ce1906548f21c87fbae8b2d71c760a3

See more details on using hashes here.

File details

Details for the file fickling-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: fickling-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 22.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for fickling-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 336d4b2138621d5c01a640c7a360f261fe61daa34af0d49b41f60486224ff351
MD5 e2a5b239e834b205f81867c819dc8202
BLAKE2b-256 bacdc570703771d012f716ec766963b01198320183567a1dcc4119d5d4280156

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