Introducing RPC Investigator

A new tool for Windows RPC research By Aaron LeMasters Trail of Bits is releasing a new tool for exploring RPC clients and servers on Windows. RPC Investigator is a .NET application that builds on the NtApiDotNet platform for enumerating, decompiling/parsing and communicating wit … | Continue reading


@blog.trailofbits.com | 1 year ago

Announcing a stable release of sigstore-python

By William Woodruff Read the official announcement on the Sigstore blog as well! Trail of Bits is thrilled to announce the first stable release of sigstore-python, a client implementation of Sigstore that we’ve been developing for nearly a year! This work has been graciously fund … | Continue reading


@blog.trailofbits.com | 1 year ago

Keeping the wolves out of wolfSSL

By Max Ammann Trail of Bits is publicly disclosing four vulnerabilities that affect wolfSSL: CVE-2022-38152, CVE-2022-38153, CVE-2022-39173, and CVE-2022-42905. The four issues, which have CVSS scores ranging from medium to critical, can all result in a denial of service (DoS). T … | Continue reading


@blog.trailofbits.com | 1 year ago

Another prolific year of open-source contributions

By Samuel Moelius This time last year, we wrote about the more than 190 Trail of Bits-authored pull requests that were merged into non-Trail of Bits repositories in 2021. In 2022, we continued that trend by having more than 400 pull requests merged into non-Trail of Bits reposito … | Continue reading


@blog.trailofbits.com | 1 year ago

How to share what you’ve learned from our audits

By Nick Selby Trail of Bits recently completed a security review of cURL, which is an amazing and ubiquitous tool for transferring data. We were really thrilled to see cURL founder and lead developer Daniel Stenberg write a blog post about the engagement and the report, and wante … | Continue reading


@blog.trailofbits.com | 1 year ago

Fast and accurate syntax searching for C and C++

By Mate Kukri The naive approach to searching for patterns in source code is to use regular expressions; a better way is to parse the code with a custom parser, but both of these approaches have limitations. During my internship, I prototyped an internal tool called Syntex that d … | Continue reading


@blog.trailofbits.com | 1 year ago

What child is this?

A Primer on Process Reparenting in Windows By Yarden Shafir Process reparenting is a technique used in Microsoft Windows to create a child process under a different parent process than the one making the call to CreateProcess. Malicious actors can use this technique to evade secu … | Continue reading


@blog.trailofbits.com | 1 year ago

How I gave ManticoreUI a makeover

By Calvin Fong During my internship at Trail of Bits, I explored the effectiveness of symbolic execution for finding vulnerabilities in native applications ranging from CTF challenges to popular open source libraries like image parsers, focusing on finding ways to enhance Mantico … | Continue reading


@blog.trailofbits.com | 1 year ago

Manticore GUIs made easy

By Wong Kok Rui, National University of Singapore Trail of Bits maintains Manticore, a symbolic execution engine that can analyze smart contracts and native binaries. While symbolic execution is a powerful technique that can augment the vulnerability discovery process, it require … | Continue reading


@blog.trailofbits.com | 1 year ago

Hybrid fuzzing: Sharpening the spikes of Echidna

By Tom Malcolm, University of Queensland, Australia Smart contract fuzzing is an effective bug-finding technique that is largely used at Trail Of Bits during audits. During my internship at Trail of Bits, I contributed to expand our fuzzing capabilities by working on Hybrid Echid … | Continue reading


@blog.trailofbits.com | 1 year ago

Specialized Zero-Knowledge Proof failures

By Opal Wright Zero-knowledge (ZK) proofs are useful cryptographic tools that have seen an explosion of interest in recent years, largely due to their applications to cryptocurrency. The fundamental idea of a ZK proof is that a person with a secret piece of information (a cryptog … | Continue reading


@blog.trailofbits.com | 1 year ago

Are you sure your Python ABI is actually stable?

TL;DR: Trail of Bits has developed abi3audit, a new Python tool for checking Python packages for CPython application binary interface (ABI) violations. We’ve used it to discover hundreds of inconsistently and incorrectly tagged package distributions, each of which is a potential … | Continue reading


@blog.trailofbits.com | 1 year ago

We’re streamers now

Over the years, we’ve built many high-impact tools that we use for security reviews. You might know some of them, like Slither, Echidna, Amarna, Tealer, and test-fuzz. All of our tools are open source, and we love seeing the community benefit from them. But mastering our tools ta … | Continue reading


@blog.trailofbits.com | 1 year ago

Look out! Divergent representations are everywhere!

By Andreas Kellas Trail of Bits recently published a blog post about a signed integer overflow in certain versions of SQLite that can enable arbitrary code execution and result in a denial of service. While working on proof-of-concept exploits for that vulnerability, we noticed t … | Continue reading


@blog.trailofbits.com | 1 year ago

We sign code now

By William Woodruff Sigstore announced the general availability of its free and ecosystem-agnostic software signing service two weeks ago, giving developers a way to sign, verify and protect their software projects and the dependencies they rely on. Trail of Bits is absolutely th … | Continue reading


@blog.trailofbits.com | 1 year ago

Stranger Strings: An exploitable flaw in SQLite

By Andreas Kellas Trail of Bits is publicly disclosing CVE-2022-35737, which affects applications that use the SQLite library API. CVE-2022-35737 was introduced in SQLite version 1.0.12 (released o… | Continue reading


@blog.trailofbits.com | 1 year ago

We do Windows now

At Trail of Bits, we pride ourselves on building tools that everyone can use to help improve the security ecosystem. Given how ingrained Microsoft is with a large portion of our work — binary analysis, cryptography, cloud security — our teams’ research and development has resulte … | Continue reading


@blog.trailofbits.com | 1 year ago

Porting the Solana eBPF JIT Compiler to ARM64

By Andrew Haberlandt  During my summer internship at Trail of Bits, I worked on the fork of the RBPF JIT compiler that is used to execute Solana smart contracts. The RBPF JIT compiler plays a criti… | Continue reading


@blog.trailofbits.com | 1 year ago

Working on blockchains as a Trail of Bits intern

By Vara Prasad Bandaru Earlier this year, I successfully completed my internship at Trail of Bits and secured a full-time position as a Blockchain Security Analyst. This post is not intended to be a technical description of the work I did during my internship. Rather, it is inten … | Continue reading


@blog.trailofbits.com | 1 year ago

Secure your machine learning with Semgrep

By Suha Hussain tl;dr: Our publicly available Semgrep ruleset now has 11 rules dedicated to the misuse of machine learning libraries. Try it out now! Picture this: You’ve spent months curating images, trying out different architectures, downloading pretrained models, messing with … | Continue reading


@blog.trailofbits.com | 1 year ago

It pays to be Circomspect

By Fredrik Dahlgren, Staff Security Engineer In October 2019, a security researcher found a devastating vulnerability in Tornado.cash, a decentralized, non-custodial mixer on the Ethereum network. Tornado.cash uses zero-knowledge proofs (ZKPs) to allow its users to privately depo … | Continue reading


@blog.trailofbits.com | 1 year ago

Magnifier: An Experiment with Interactive Decompilation

By Alan Chang Today, we are releasing Magnifier, an experimental reverse engineering user interface I developed during my internship. Magnifier asks, “What if, as an alternative to taking handwritten notes, reverse engineering researchers could interactively reshape a decompiled … | Continue reading


@blog.trailofbits.com | 1 year ago

Using mutants to improve Slither

By Alex Groce, Northern Arizona University Improving static analysis tools can be hard; once you’ve implemented a good tool based on a useful representation of a program and added a large number of rules to detect problems, how do you further enhance the tool’s bug-finding power? … | Continue reading


@blog.trailofbits.com | 1 year ago

The road to the apprenticeship

By Josselin Feist, Principal Security Engineer Finding talent is hard, especially in the blockchain security industry. The space is new, so you won’t find engineers with decades of experience with smart contracts. Training is difficult, as the technology evolves constantly, and o … | Continue reading


@blog.trailofbits.com | 1 year ago

Shedding smart contract storage with Slither

By Troy Sargent, Blockchain Security Engineer You think you’ve found a critical bug in a Solidity smart contract that, if exploited, could drain a widely used cryptocurrency exchange’s funds. To confirm that it’s really a bug, you need to figure out the value at an obscure storag … | Continue reading


@blog.trailofbits.com | 1 year ago

What we learned when we reverse-engineered libmagic and its DSL

By Evan Sultanik, Principal Security Engineer A couple of years ago we released PolyFile: a utility to identify and map the semantic structure of files, including polyglots, chimeras, and schizophr… | Continue reading


@blog.trailofbits.com | 1 year ago

Are blockchains decentralized: New Trail of Bits research report examines

A new Trail of Bits research report examines unintended centralities in distributed ledgers Blockchains are exciting and innovative and can help push the boundaries of current technology in useful … | Continue reading


@blog.trailofbits.com | 1 year ago

The new Trail of Bits podcast

Trail of Bits has launched a podcast. The first five-episode season is now available for download. The podcast and its RSS feed are available at trailofbits.audio, and you may subscribe on all majo… | Continue reading


@blog.trailofbits.com | 1 year ago

Themes from Real World Crypto 2022

By William Woodruff Last week, over 500 cryptographers from around the world gathered in Amsterdam for Real World Crypto 2022, meeting in person for the first time in over two years. As in previous… | Continue reading


@blog.trailofbits.com | 2 years ago

Improving the State of Go-Fuzz

By Christian Presa Schnell During my winternship, I used the findings from recent Go audits to make several improvements to go-fuzz, a coverage-based fuzzer for projects written in Go. I focused on… | Continue reading


@blog.trailofbits.com | 2 years ago

Towards Practical Security Optimizations for Binaries

By Michael D. Brown, Senior Security Engineer To be thus is nothing, but to be safely thus. (Macbeth: 3.1) It’s not enough that compilers generate efficient code, they must also generate safe code.… | Continue reading


@blog.trailofbits.com | 2 years ago

Improving crypto code in Rust using LLVM’s optnone

By Henrik Brodin Let’s implement crypto! Welcome to the second part of our posts on the challenges of implementing constant-time Rust code. Part 1 discussed challenges with constant-time impl… | Continue reading


@blog.trailofbits.com | 2 years ago

The Life of an Optimization Barrier

By Fredrik Dahlgren Many engineers choose Rust as their language of choice for implementing cryptographic protocols because of its robust security guarantees. Although Rust makes safe cryptographic… | Continue reading


@blog.trailofbits.com | 2 years ago

Disclosing Shamir’s Secret Sharing Vulnerabilities and Announcing ZKDocs

By Filipe Casal and Jim Miller Trail of Bits is publicly disclosing two bugs that affect Shamir’s Secret Sharing implementation of Binance’s threshold signature scheme library (tss-lib) and most of… | Continue reading


@blog.trailofbits.com | 2 years ago

What does your code use, and is it vulnerable? It-depends

You just cloned a fresh source code repository and want to get a quick sense of its dependencies. Our tool, it-depends, can get you there. We are proud to announce the release of it-depends, an ope… | Continue reading


@blog.trailofbits.com | 2 years ago

Discovering Goroutine Leaks with Semgrep

By Alex Useche, Security Engineer Originally published May 10, 2021 While learning how to write multithreaded code in Java or C++ can make computer science students reconsider their career choices,… | Continue reading


@blog.trailofbits.com | 2 years ago

Write Rust lints without forking Clippy

By Samuel Moelius, Staff Engineer Originally published May 20, 2021 This blog post introduces Dylint, a tool for loading Rust linting rules (or “lints”) from dynamic libraries. Dylint makes it easy… | Continue reading


@blog.trailofbits.com | 2 years ago

A Year in the Life of a Compiler Fuzzing Campaign

By Alex Groce, Northern Arizona University In the summer of 2020, we described our work fuzzing the Solidity compiler, solc. So now we’d like to revisit this project, since fuzzing campaigns tend t… | Continue reading


@blog.trailofbits.com | 3 years ago

Never a dill moment: Exploiting machine learning pickle files

By Evan Sultanik Many machine learning (ML) models are Python pickle files under the hood, and it makes sense. The use of pickling conserves memory, enables start-and-stop model training, and makes… | Continue reading


@blog.trailofbits.com | 3 years ago

The Tao of Continuous Integration

By Paul Kehrer It is a truism in modern software development that a robust continuous integration (CI) system is necessary. But many projects suffer from CI that feels brittle, frustrates developer… | Continue reading


@blog.trailofbits.com | 3 years ago

Serving up zero-knowledge proofs

By Jim Miller, Senior Cryptography Analyst Zero-knowledge (ZK) proofs are gaining popularity, and exciting new applications for this technology are emerging, particularly in the blockchain space. S… | Continue reading


@blog.trailofbits.com | 3 years ago

Smart (and simple) ways to prevent symlink attacks in Go

After writing Go for years, many of us have learned the error-checking pattern down to our bones: “Does this function return an error? Ope, better make sure it’s nil before moving on.” And that’s g… | Continue reading


@blog.trailofbits.com | 3 years ago

Seriously, Stop Using RSA

Here at Trail of Bits we review a lot of code. From major open source projects to exciting new proprietary software, we’ve seen it all. But one common denominator in all of these systems is that fo… | Continue reading


@blog.trailofbits.com | 3 years ago

Efficient smart contract security audits with machine learning and slither-simil

by Sina Pilehchiha, Concordia University Trail of Bits has manually curated a wealth of data—years of security assessment reports—and now we’re exploring how to use this data to make the smart cont… | Continue reading


@blog.trailofbits.com | 3 years ago

Let’s build a high-performance fuzzer with GPUs

by Ryan Eberhart, Stanford University TL;DR: Can we use GPUs to get 10x performance/dollar when fuzzing embedded software in the cloud? Based on our preliminary work, we think the answer is yes! Fu… | Continue reading


@blog.trailofbits.com | 3 years ago

Osquery: Using D-Bus to query systemd data

by Rachel Cipkins, Stevens Institute of Technology During my summer internship at Trail of Bits I worked on osquery, the massively popular open-source endpoint monitoring agent used for intrusion d… | Continue reading


@blog.trailofbits.com | 3 years ago

Graphtage: A New Semantic Diffing Tool

Graphtage is a command line utility and underlying library for semantically comparing and merging tree-like structures such as JSON, JSON5, XML, HTML, YAML, and TOML files. | Continue reading


@blog.trailofbits.com | 3 years ago

Sinter: New user-mode security enforcement for macOS

TL;DR: Sinter is the first available open-source endpoint protection agent written entirely in Swift, with support for Apple’s new EndpointSecurity API from first principles. Sinter demonstrates ho… | Continue reading


@blog.trailofbits.com | 3 years ago