Source - Osservatorio Nessuno

Vote for progressive fees at May 2026 RIPE General Meeting
On 20–22 May 2026, RIPE NCC members will vote on the charging scheme for 2027, at the General Meeting in Edinburgh and remotely. There are two options. Option A keeps the current flat-fee model. Every LIR account pays the same yearly fee. The fee goes from €1,800 to €1,894. The €50 fee per additional ASN and the €75 fee per PI or legacy resource stay in place. Option B is a category model. LIRs are split into 21 categories based on the amount of PA IPv4 and IPv6 they hold. The lowest category pays €500 per year, the highest pays €39,864. We counted from the current RIPE database: about 75% of LIR accounts would pay less under Option B than under Option A. PI and legacy resources are not counted toward the category. The RIPE NCC also provides a pricing calculator for both options. We are asking LIRs to vote for Option B, as that would allow us and many other small organizations to exit the sponsoring scheme to become full LIRs, with the rights and duties associated. A SHORT GLOSSARY * RIPE NCC is the Regional Internet Registry for Europe, the Middle East and parts of Central Asia. It hands out IP addresses and Autonomous System Numbers (ASNs). * LIR (Local Internet Registry) is an organization that holds resources directly from RIPE NCC, pays a yearly fee, and can sub-assign address space to its own customers. Only LIR accounts can vote at the General Meeting. * ASN (Autonomous System Number) is a number that identifies a network on the public internet for routing purposes (BGP). Ours is 214094. * PA (Provider Aggregatable) is address space that an LIR holds from RIPE NCC and sub-assigns to its customers. If the customer leaves, they lose the addresses. * PI (Provider Independent) is address space assigned to an end-user directly. The end-user keeps it even if they change network provider. * Sponsoring LIR is an LIR that signs the contract with RIPE NCC on behalf of an end-user who holds PI resources or a sponsored ASN. The end-user is the actual holder, pays the LIR, but does not vote. * Legacy resources are IP blocks and ASNs assigned before RIPE NCC existed in its current form. WHY WE CARE We became AS214094 thanks to a sponsoring LIR that took us on for free, though they started incurring costs, like many others, since the RIPE NCC started charging for sponsored ASNs and raised the fee on Legacy or PI resources. The base LIR fee was €1,400 until 2022, €1,550 in 2023–2024, €1,800 in 2025–2026, and €1,894 if Option A passes. We counted sponsored objects in historical RIPE database snapshots. Sponsored IPv4 PI and legacy registrations dropped from 15,949 in 2018 to 13,613 today. Sponsored ASNs took a sharp dip in January 2025, the month the new per-ASN fee took effect. Sponsored resources in the RIPE NCC region, 2018–2026 We believe the divergence is an increase in the IPv4 leasing market. Operators still want their own ASN, so the network identity is still being registered. However, due to RIPE policies, IPv4 PI assignments are harder and harder to obtain, and are almost absent from the secondary market. Sponsored IPv6 PI assignments grew over the same period, so the decline is specifically about IPv4 scarcity, not about operators losing interest in registering their own resources. Leasing itself is not recorded in the RIPE database, but the dashed line in the chart is the closest extrapolation we could build from RIPE data: sponsored ASN holders that also hold ASSIGNED PA sub-assigned to them by another LIR: upstream allocations, IPv4 brokers, and leasing platforms all roll into this category. The count of such sub-assignments grew from 4,140 in 2018 to 7,405 today (+79%). IPv4 PI assignments are closed. The €50 per-PI fee has been in place since 2011 and was raised to €75 in 2025, the same year the new €50 per-ASN fee was introduced. It was already expensive to join the registry, but more than that, it is increasingly difficult to have long-term IPv4 assignments that are not subject to someone else’s conditions, termination, or reputation checks. And those most directly impacted by these decisions, sponsored end-users and PI holders, do not have a vote at the General Meeting. WHY THIS MATTERS FOR TOR AND SMALL OPERATORS Running Tor relays on commercial providers has always been difficult. Many providers will take nodes down based solely on abuse complaints, often automated, often based on spoofed traffic as we wrote in 2024. For exits (but also in other circumstances), leasing is extremely hard: since IPv4 ranges lose value as complaints damage their reputation, most marketplaces let the lessor terminate the agreement in such cases. Even when an operator manages to lease, they then pay rent indefinitely instead of owning the resource, which over a network’s lifetime is the more expensive option. Leased ranges are also less stable: the lessor can pull the range back with notice. Many hosting providers themselves now lease their IPv4 from the same marketplace, so when one customer’s Tor relay damages a range shared with their other customers, the relay is the easier thing to drop. The deterrent effect is more noticeable on politically sensitive infrastructure. Owning your own ASN and address space is the only stable answer. The routes to get there, become an LIR, or find a sponsor, are precisely the ones getting more expensive. Option A makes both routes even less accessible. Option B makes the LIR route accessible for the first time in years for a small operator. A PROGRESSIVE SCHEME IS THE OBVIOUS ANSWER The bill should be paid in proportion to how much of the limited resource a member holds. This is the standard logic of progressive taxation. Option B applies it to the registry of network resources. The redistribution is mostly symbolic for the LIRs paying less: the 75% who save under Option B together hold only 2.3% of the PA IPv4 in the RIPE region. However, at the top about 10% of LIRs hold 94% of all PA IPv4. These are the LIRs whose fee more than doubles under Option B — starting at €4,335/year, from a /18 (16,384 addresses) and up. Resources held vs fees paid: who carries the registry, by LIR percentile A NOTE ON GOVERNANCE A member of ours has attended a RIPE meeting, and that led us to believe the event is not necessarily representative of the wider internet community that depends on these decisions. A progressive charging scheme will not fix that on its own, but it lowers the entry barrier. At a €500 minimum, the LIR system becomes affordable for entities that are not running a commercial business: civil-society projects, nonprofits, collectives, and public-interest infrastructure. Each one of them at the table would help change some of the dynamics at the General Meeting, distribute the power inside the registry, and make advocacy easier. WHAT YOU CAN DO If you are an LIR, register for the General Meeting and vote Option B, in Edinburgh or remotely, and if you cannot vote, share this. Correction (18 May 2026): an earlier version of this post stated that the per-ASN and per-PI fees were both introduced in 2025. In fact, the €50 per-PI fee has existed since 2011; in 2025 it was raised to €75. The LIR fee timeline has also been clarified, and two references to “RIPE” have been corrected to “RIPE NCC”. Update (22 May 2026): the voting report is out and, unfortunately, Option A has won by few votes: 1,547 (51.12%) to 1,479 (48.88%), a margin of just 68. Turnout was extremely low: 3,049 ballots cast out of 20,717 eligible LIR accounts (as of March 2026), around 15%.
Demystifying phone unlocking tools: A technical overview
This post is a written description of a presentation titled Phone unlocking tools and where to find them that we have delivered privately to different events and organizations, including Primavera Hacker 25, the Freedom of the Press Foundation, and the Public Interest Technology Group. It provides a technical overview of how commercial forensic tools compromise mobile devices, focusing on the specific attack surfaces exploited at each stage of the device lifecycle. Further posts will focus on sample analysis, and defenses. See also the previous posts of this serie: * Cellebrite and the routine use of digital surveillance in Italy * A deep dive into Cellebrite: How it came to be * A deep dive into Cellebrite: Android support as of February 2025 INTRODUCTION Commercial phone unlocking tools are not magic. They exploit the same classes of vulnerabilities that security researchers publish about at conferences and in academic papers. What makes them distinctive is not the novelty of the techniques, but the systematic commercialization of exploitation: acquiring or developing exploits for each hardware and software combination, and reaching a certain degree of stability, packaging them into automated workflows that require minimal operator expertise. This post aims to demystify the technical foundations of these tools. The attack vectors available to a forensic examiner with physical access to a device are constrained by well-understood boundaries: the boot chain, the trusted execution environment, the secure element (when present), and the kernel’s peripheral driver stack. This post mostly details Android internals, however iOS equivalent concepts are technically similar. Much of the background research referenced here comes from Quarkslab, whose extensive publications on TEEs, and Android’s data encryption architecture have been invaluable to understand these tools. Their work, alongside reporting from Amnesty International’s Security Lab and other NGOs, and analysis by the GrapheneOS project, provides the empirical basis for the claims made in this post. HARDWARE SECURITY ARCHITECTURE Before examining attack vectors, it is necessary to understand the hardware security architecture of modern Android devices. The following sections describe the components that forensic tools must eventually hack or bypass. THE SYSTEM-ON-CHIP: NORMAL WORLD AND SECURE WORLD Modern ARM-based mobile processors implement TrustZone™, a hardware security extension that partitions the processor into two execution environments: the Normal World and the Secure World. The Normal World runs the Android operating system, user applications, and the Linux kernel. The Secure World runs a separate, minimal operating system, the Trusted OS, along with small, specialized applications known as Trusted Applications (TAs). SoC diagram showing Normal World and Secure World partitions, with the TEE running Trusted Applications and communicating with an optional Secure Element over SPI The two worlds share the same physical processor cores but are hardware-isolated: the Normal World cannot directly read or write Secure World memory. Communication between the two happens through a monitor, a piece of code running at the highest privilege level (EL3 on ARMv8), which handles context switches triggered by Secure Monitor Call (SMC) instructions. Each physical processor core effectively provides two virtual cores, with the Non-Secure bit in the Secure Configuration Register determining which world is active at any given time. The Trusted OS hosts critical security services. Two are directly relevant to device unlocking: * Gatekeeper: responsible for verifying user credentials (PIN, password, pattern). It implements rate-limiting to throttle brute-force attempts and, upon successful authentication, issues a signed authentication token. * Keymaster: the key management service that stores and operates on cryptographic keys. Some keys are authentication-bound, meaning they can only be used after Gatekeeper has issued a valid token. Different SoC vendors ship different TrustZone™ implementations. Google (and AOSP in general) uses TrustyOS; Qualcomm uses QSEE; Samsung uses TEEGRIS (on both Exynos and MediaTek SoCs in Samsung devices); Huawei uses TrustedCore; Trustonic’s Kinibi is also often found on MediaTek and Exynos SoCs. The security properties vary between implementations. THE SECURE ELEMENT A Secure Element (SE) is a physically separate, tamper-resistant hardware chip that provides an additional layer of security beyond the TEE. Unlike the Secure World, which runs on the same SoC as the Normal World, a Secure Element is an independent processor with its own boot chain, its own firmware, and its own cryptographic key storage. In the Android ecosystem, the Secure Element is exposed through the StrongBox API (introduced in Android 9). Google’s Pixel phones, starting with the Pixel 3, include the Titan M chip as their Secure Element, that was later upgraded with the Titan M2 from Pixel 6 onward. On Apple devices, the equivalent is the Secure Enclave Processor (SEP). The Secure Element’s role in device encryption is to hold key-encryption keys and enforce rate-limiting for credential verification in hardware that the main SoC cannot tamper with, even if fully compromised. This is an important distinction: on a device without a Secure Element, compromising the TEE is sufficient to extract or bypass credential-derived keys. On a device with a Secure Element, the attacker must additionally compromise a separate, hardened chip. Unfortunately, only flagship devices typically include a Secure Element. Most mid-range and budget devices rely solely on the TEE for credential protection. This architectural gap is the single most important factor determining the chances that a device has to resist forensic unlocking when powered off. THE BOOT CHAIN The boot chain establishes a chain of trust from immutable hardware to the running operating system. Each stage verifies the integrity of the next before executing it. Boot flow diagram showing Boot ROM → Preloader → Trusted OS and Monitor (Secure World) / Bootloader → OS (Normal World), with the Secure Element running its own boot chain The chain proceeds as follows: 1. Boot ROM: the first code executed at power-on. It is burned into silicon at manufacture and is, in principle, immutable and unpatchable (with a few modern exceptions to deploy patches for vulnerabilities). The Boot ROM verifies and loads the next stage (the preloader or secondary bootloader). It forms the hardware root of trust. 2. Preloader/Secondary Bootloader (BL2): loaded and verified by the Boot ROM. On MediaTek SoCs, this is often called the preloader. It initializes hardware, loads the Trusted OS into the Secure World, and loads the main bootloader into the Normal World. 3. Trusted OS: loaded into the Secure World by the preloader. It hosts Gatekeeper, Keymaster, and other Trusted Applications. Its integrity is verified by the preloader as part of the secure boot chain. 4. Bootloader (BL3): the Normal World bootloader (e.g., Little Kernel on MediaTek, ABL on Qualcomm). It enforces Android Verified Boot (AVB), anti-rollback protections, and device-state checks before loading the Android kernel. 5. Android OS: the Linux kernel and userspace. Verified Boot (dm-verity) ensures the integrity of system partitions at runtime. When a Secure Element is present, it runs its own independent boot chain in parallel: Boot ROM → Bootrom EXT → Bootloader → OS. The Secure Element’s boot chain is entirely separate from the SoC’s, providing the most isolation. If any stage in the boot chain is compromised, all subsequent stages are untrustworthy. This is why Boot ROM vulnerabilities are so devastating: they are often unpatchable, they undermine everything built on top, and they affect every device using the vulnerable silicon for its entire hardware lifetime. ANDROID DATA ENCRYPTION Understanding the attack vectors requires understanding what the attacker is ultimately trying to obtain: the decryption keys for the user’s data. FULL DISK ENCRYPTION VS. FILE-BASED ENCRYPTION Android has used two encryption schemes over its history: Full Disk Encryption (FDE) encrypts the entire data partition with a single key, derived from the user’s credentials. The key must be available before the OS can boot, so the user is prompted for their PIN or password at boot time. FDE was the default until Android 6 and has been deprecated since Android 13. File-Based Encryption (FBE) encrypts individual files with different keys, allowing more granular access control. FBE has been the default since Android 7 and is required since Android 10. It divides storage into two classes: * Device Encrypted (DE) storage: available immediately after boot, before the user authenticates. Used for system-critical functionality (alarms, phone dialer, Direct Boot). The DE key is derived without user credentials. * Credential Encrypted (CE) storage: available only after the user authenticates for the first time after boot. This is where all user data resides—messages, photos, application data. The CE key is derived from the user’s credentials, stretched through scrypt, and protected by keys held in the TEE (and, when present, the Secure Element). CE KEY DERIVATION: THE ROLE OF CREDENTIALS Quarkslab’s Android Data Encryption in depth provides the most detailed public analysis of how the CE key is derived. The process, in simplified form, proceeds as follows: 1. The user’s credentials (PIN, password, or pattern) are stretched using scrypt, a memory-hard key derivation function, with parameters and salt stored in DE-protected files under /data/system_de/<uid>/spblob. The scrypt step is intentionally slow: it introduces a negligible delay for a single authentication attempt but makes brute-forcing computationally expensive. 2. The stretched credentials are combined with other material to form a password blob, which is sent to the Gatekeeper Trusted Application in the TEE. Gatekeeper verifies the blob against a stored password handle using an HMAC with an internal key. If verification succeeds, Gatekeeper issues a signed authentication token. 3. The authentication token is presented to Keymaster, which uses it to unlock an authentication-bound key. This key is used to perform the first decryption of the Synthetic Password, an intermediate secret stored in encrypted form on the filesystem. 4. The Synthetic Password is decrypted a second time using a key derived from the user’s credentials (the applicationId). This second decryption uses AES-GCM, which provides authenticated encryption: if the wrong credentials are supplied, the GCM tag will not match and decryption will fail. This is the cryptographic check that ultimately binds the CE key to the correct credentials. 5. From the Synthetic Password, the system derives the CE file encryption keys used by the Linux kernel’s fscrypt subsystem to decrypt individual files. The critical observation is that user credentials are cryptographically embedded in the key derivation chain. There is no way to bypass them purely through software attacks: an attacker who compromises the TEE can bypass the authentication token check, but they still need to brute-force the credentials through scrypt to derive the correct key material. KEY DERIVATION WITH A SECURE ELEMENT (WEAVER) On devices with a Secure Element, the key derivation process includes an additional step. Instead of relying solely on Gatekeeper in the TEE, the system uses Weaver, a service running on the Secure Element. Weaver stores a secret value that is released only upon correct credential verification and enforces its own independent rate-limiting. This means that even if an attacker fully compromises the TEE, or other Trusted Applications as shown by Synacktiv’s Kinibi TEE blogpost, they cannot extract the Weaver secret or bypass its throttling, if implemented properly. Brute-forcing must proceed online, at the rate the Secure Element permits, which, for a device like the Pixel with Titan M, means exponential backoff. ATTACK VECTORS With the architecture established, we can now map the specific attack surfaces that forensic tools exploit. These fall into two main categories, corresponding to teo device states: powered off or powered on but never unlocked (BFU), and powered on and previously unlocked (AFU). BFU ATTACKS ON DEVICES WITHOUT A SECURE ELEMENT The most complete form of BFU attack targets the boot chain itself. If an attacker can compromise the Boot ROM or the preloader, they can break the entire chain of trust, including the TEE. BFU attack diagram on a device without a Secure Element: the attacker exploits the Boot ROM or enters recovery mode, compromises the preloader and Trusted OS, extracts the scrypt hash, and performs offline brute force of the PIN The attack proceeds as follows: 1. Boot ROM exploitation: the attacker connects to the device via USB and exploits a vulnerability in the Boot ROM (or uses a vendor-specific download/recovery mode, such as MediaTek’s Download Mode or Qualcomm’s EDL mode) to gain code execution before the bootloader runs. 2. Boot chain patching: with Boot ROM-level access, the attacker patches or replaces the preloader to disable secure boot verification of subsequent stages. This allows loading a modified Trusted OS and modified Trusted Applications. 3. TEE patching: the attacker replaces or patches Gatekeeper to accept any credentials and issue valid authentication tokens regardless of input. They also patch or extract keys from Keymaster. As Quarkslab demonstrated in their proof-of-concept on Samsung A22 devices (MT6769V and MT6833V SoCs), this involved patching Samsung’s TEEGRIS operating system: first disabling verification of the root filesystem, then disabling TA signature verification, and finally patching Gatekeeper’s credential comparison to always succeed. 4. Key material extraction: with a rooted Android system and a compromised TEE, the attacker extracts the encrypted Synthetic Password and the intermediate decryption result from Keymaster. 5. Offline brute force: the attacker now has all the material needed for offline brute-forcing. The brute-force loop is: * Generate a candidate password * Stretch it through scrypt with the stored parameters * Derive the applicationId * Attempt AES-GCM decryption of the Synthetic Password * If the GCM tag matches, the correct credentials have been found Because this brute-force runs entirely offline, on the attacker’s hardware, it is bounded only by computational resources and password complexity. A numeric PIN of six digits or fewer is trivially recoverable. Even longer numeric PINs fall quickly on dedicated hardware. Only a strong alphanumeric and symbols password provides meaningful resistance. MediaTek devices are particularly vulnerable to this attack. Multiple MediaTek SoCs contain Boot ROM vulnerabilities that are publicly known and exploited by open-source tools such as MTKClient. Because Boot ROM code is immutable, these vulnerabilities cannot be patched: every device using the affected silicon is permanently compromised, regardless of Android version or security patch level. Quarkslab’s proof-of-concept targeted exactly this class of device, demonstrating the full chain from Boot ROM exploit to CE key recovery. BFU ATTACKS ON DEVICES WITH A SECURE ELEMENT When a Secure Element is present, the attack chain is fundamentally harder. Even if the attacker achieves everything described above, they still cannot extract the Weaver secret from the Secure Element, under normal circumstances. Chances of a Secure Element exploit are pretty low, especially as being distributed as part of a widely available forensics commercial suite. BFU attack diagram on a device with a Secure Element: the attacker can compromise the Boot ROM, preloader, and Trusted OS, but the Secure Element enforces rate-limited online brute force As anticipated, the Secure Element runs its own independent boot chain on physically separate silicon. Its keys cannot be extracted by the main SoC, and its rate-limiting logic is enforced in hardware that the attacker does not control. The result is that brute-force can often only proceed online: each attempt must query the Secure Element, which enforces some kind of backoff. This slows down the attack significantly. A ten-digit PIN that falls in seconds to offline brute-force may take a long time against a properly implemented Secure Element. An alphanumeric password becomes likely unbreakable. This is why, according to Cellebrite’s own February 2025 support matrix, brute-force capabilities are generally not available for Pixel devices with Titan M. The Secure Element is doing exactly what it was designed to do. That said, the Secure Element is not immune to vulnerabilities. Quarkslab demonstrated code execution on the Titan M chip through CVE-2022-20233, a single-byte out-of-bounds write in the Keymaster task that could be exploited to hijack execution flow. This vulnerability has since been patched, but it demonstrates that Secure Elements, while vastly more resistant than TEE-only configurations, can still have issues. Google is offering up to $1,500,000 for a zero-click vulnerabilities on the Pixel Titan M2. AFU ATTACKS: THE LOCK SCREEN IS JUST UI After the first unlock, the threat model fully changes. In AFU state, the CE decryption keys are loaded in memory and remain there. The lock screen is no longer a cryptographic barrier, it is just a user interface element, a screen overlay that prevents interaction but does not re-encrypt data. This means that an AFU attacker does not need to brute-force credentials at all. They need to achieve code execution in the kernel or a privileged process, at which point they have direct access to the decrypted filesystem. The lock screen is bypassed, and no encryption needs to be broken. The primary attack surface in AFU state is the USB interface. When a device is locked but in AFU state, the USB controller remains active and exposes the device’s kernel to a substantial attack surface. USB attack surface diagram: an attacker connects a peripheral emulator to the USB controller, which reaches approximately 200 kernel drivers (MTP, MSC, HID, Audio, CVC, and others) behind the lock screen As the diagram illustrates, a peripheral emulator connected to a locked device’s USB port can interact with the kernel through approximately 200 reachable drivers, including MTP (Media Transfer Protocol), MSC (Mass Storage Class), HID (Human Interface Device), Audio, and CVC (Communication Voice Class) subsystems. Each of these drivers is a potential attack surface for memory corruption vulnerabilities. The exploit used by Cellebrite against a Serbian activist’s device in December 2024, as documented by Amnesty International, attempted to use at least three Linux kernel USB driver vulnerabilities: * CVE-2024-53104: a vulnerability in the USB Video Class (UVC) driver. * CVE-2024-53197: an out-of-bounds write in the ALSA USB-audio driver, triggered when a malicious USB device provides a bNumConfigurations value exceeding allocated memory. This vulnerability affects legacy code present since Linux kernel 2.6.26 (2008) and was confirmed by CISA to be actively exploited in the wild. * CVE-2024-50302: a memory leak in the HID subsystem that exposes uninitialized kernel memory, including encryption keys and authentication tokens, when processing crafted USB HID reports. The Cellebrite Turbo Link device, a specialized hardware adapter that connects between the forensic workstation and the target device, likely functions as a peripheral emulator capable of presenting itself as multiple USB device types in rapid succession, probing for each vulnerability to achieve kernel-level code execution. Many of these USB drivers are loaded by default and remain reachable even when the device is locked. The kernel does not distinguish between a legitimate USB accessory and a malicious peripheral emulator, thus this is the main weakness that AFU exploitation often relies upon. AFU ATTACKS ON LOCKED DEVICES IN PRACTICE AFU attack flow: USB exploit achieves kernel code execution, bypassing the lock screen to access user processes and decrypted CE storage Once the attacker achieves kernel code execution through USB driver exploitation, the lock screen is irrelevant. The attacker can: * Directly read the decrypted filesystem, since CE keys are already in memory * Perform a Full File System (FFS) extraction of all user data * Access application data, messages, photos, credentials, and metadata * Potentially install persistent backdoors As we already knew, a device in AFU state is fundamentally less secure than a device in BFU state, regardless of the strength of the user’s password or the presence of a Secure Element. The Secure Element protects credential-derived keys at boot; it does not protect already-decrypted data in memory after the first unlock. This is confirmed by Cellebrite’s February 2025 support matrix, which shows AFU extraction capabilities even for devices (including recent Pixels with stock Android) that resist BFU attacks. Notably, according to the same documentation, GrapheneOS on Pixel devices resists AFU extraction, probably thanks to the attack surface reduction and the USB restrictions that are implemented beyond stock Android. A NOTE ON IOS: CHECKM8 AND USB RESTRICTED MODE Apple devices face analogous attack surfaces. The checkm8 exploit, publicly released in 2019, targets an unpatchable Boot ROM vulnerability present in all Apple devices from the iPhone 4S through the iPhone X (A5 through A11 SoCs). Like MediaTek Boot ROM vulnerabilities, checkm8 cannot be fixed through software updates: every affected device is permanently exploitable. For newer Apple devices, AFU attacks rely on USB-based exploitation. Apple introduced USB Restricted Mode in iOS 11.4.1 to mitigate this: if the device has been locked for more than one hour, the Lightning or USB-C port is restricted to charging only, disabling data connections that forensic tools require. However, Quarkslab’s analysis of CVE-2025-24200 (reported by CitizenLab) revealed that USB Restricted Mode was bypassable. The vulnerability, reported by Citizen Lab and patched in iOS 18.3.1, allowed a physical attacker to re-enable USB data connections on a locked device by exploiting a flaw in the Accessibility framework. The profiled daemon, which handles device management settings, failed to check whether the device was locked before processing requests to disable USB Restricted Mode. In other words, the USB port was only soft-disabled: something as simple as a logic bug in the policy enforcement allowed it to be re-enabled. Forensic vendors have already started producing countermeasures to Apple’s inactivity reboot. Cellebrite’s Spring 2026 release for Inseyets advertises a “Safeguard Mode” that “mitigates the impact of iOS inactivity reboot timers by preserving access to a device” — in practice, preventing the device from returning to BFU state once they have AFU access. Magnet Forensics ships a hardware product called GrayKey Preserve which similarly aims to suppress the auto-reboot, network wipes and remote wipes on captured devices. These tools likely ship the same AFU exploits in a different, locked-down chassis that performs only preservation rather than extraction, which is also why they can move faster than the full extraction suites. DEFENSIVE IMPLICATIONS The attack vectors described above lead to a clear set of defensive priorities. BFU IS YOUR BEST DEFENSE The most impactful single action when facing potential device seizure is to power the device off. This returns it to BFU state, where: * CE storage is encrypted and keys are not in memory * USB driver exploitation cannot yield decrypted data * The attacker must compromise the boot chain and brute-force credentials * On devices with a Secure Element, brute-force is rate-limited by hardware ENABLE LOCKDOWN MODE ON IOS iOS users should enable Lockdown Mode. It hardens the device against exploitation across messaging, web, and attachments, and there is public-record evidence of it stopping at least one extraction attempt: an FBI CART court filing on an iPhone 13 explicitly states that “Because the iPhone was in Lockdown mode, CART could not extract that device”. The mechanism is not officially documented, but it is consistent with what Lockdown Mode is known to do: shrink the reachable attack surface, restrict USB more aggressively, and block the configuration-profile and MDM enrollment that forensic and “jailbreak” tools have historically abused to sideload unverified components. AUTO-REBOOT: RETURNING TO BFU AUTOMATICALLY If a device cannot be manually powered off, an automatic reboot mechanism provides the next best defense. After a configurable period without user authentication, the device reboots, returning to BFU state and purging decryption keys from memory. GrapheneOS has implemented this feature for years. Apple introduced it in iOS 18. Stock Android on Pixel devices gained a limited version in Android 15, but its implementation remains less configurable and less aggressive than GrapheneOS’s. The feature is the most useful if the timeout is short (2-4 hours) and loses its value when its multiple days, as Google enforces likely as a result of negotiation with law enforcement. GrapheneOS in particular allows the timeout to be configured very low, precisely because the team has long considered the risk of an exploit being produced to inhibit the reboot itself. USB PORT RESTRICTION Disabling USB data transfer when the device is locked directly eliminates the AFU attack surface described above. Android 15 introduces USB restriction options; iOS has had USB Restricted Mode since version 11. GrapheneOS provides more trustworthy and configurable USB restriction. PASSWORD STRENGTH The brute-force analysis makes the case for strong passwords unambiguous: * A 4-digit PIN: trivially crackable offline, and crackable even online within hours to days * A 6-digit PIN: trivially crackable offline; crackable online within days to weeks depending on rate-limiting implementation * A pattern: equivalent to or weaker than a short PIN in entropy * An alphanumeric password of 10+ characters with mixed case and symbols: computationally unlikely to brute-force offline through scrypt; almost impossible to brute-force online against a Secure Element The password is only required at boot. Biometric authentication (fingerprint, face recognition) handles daily unlocking, unless the user is in a jurisdiction where physical coercion is likely, whether lawfully or not. The marginal inconvenience of entering a strong password once after each reboot is minimal compared to the protection it provides. DEVICE CHOICE According to Cellebrite’s own February 2025 documentation: * MediaTek-based devices: effectively no mitigation possible against BFU attacks due to unpatchable Boot ROM vulnerabilities. * Most non-Pixel, non-Samsung Android devices: considered unlockable, with few exceptions, due to a combination of delayed security updates, weak TEE implementations, and absent Secure Elements. * Samsung devices (Exynos): partial protection, varying by model and patch level. * Google Pixel with stock Android: resistant to BFU attacks on recent models, but AFU file system extraction is possible. * Google Pixel with GrapheneOS: resistant to both BFU and AFU attacks on recent models (6a and newer). This is the strongest protection available on any Android device. A subsequent Cellebrite matrix leaked in October 2025 suggests Cellebrite has since also lost Full File System extraction support against unlocked GrapheneOS devices. It is worth noting that alternative Android distributions such as LineageOS or CalyxOS, while valuable for other reasons, do not meaningfully change the forensic unlocking picture from the stock or vendor ROM. APPLICATION-LEVEL ENCRYPTION Applications that implement their own encryption layer with a separate password can provide defense-in-depth against full device compromise. Password managers’ master password vaults are a good example: even if the entire device filesystem is extracted, the vault remains encrypted under a key that the forensic tool has not obtained. However, the effectiveness of application-level protection depends on several factors: whether the app actually implements its own encryption independently from the OS credential protection, whether decryption keys remain in memory after first unlock (making them vulnerable to AFU extraction), whether the app relies on the system biometric authentication (which, without a Secure Element, is broken along with the rest of the OS key hierarchy), and whether notifications or message previews are cached in plaintext outside the app’s encrypted storage. CONCLUSION The way these tools operate is not magic nor secret. The more we collect samples, reverse engineer and read promotional and support material, the better we understand capabilities and defenses. As we said many times these tools simply shouldn’t commercially exist. The companies that build these tools are active participants in the zero-day vulnerability trade, stockpiling security flaws that weaken every device, for every user, everywhere. The technical defenses described here are effective but place the burden on individuals and communities. Update (20 May 2026): following feedback from Final of the GrapheneOS Foundation, this post was updated with information about iOS Lockdown Mode, forensic-vendor countermeasures to iOS inactivity reboot (Cellebrite Safeguard Mode and Magnet GrayKey Preserve), GrapheneOS’s auto-reboot design rationale, and the October 2025 Cellebrite matrix leak. REFERENCES * Quarkslab, “Android Data Encryption in depth” (2023) * Quarkslab, “Introduction to Trusted Execution Environment: ARM’s TrustZone™” (2018) * Quarkslab, “A Deep Dive into Samsung’s TrustZone™” (series) * Quarkslab, “Attacking Titan M with Only One Byte” (2022) * Quarkslab, “First analysis of Apple’s USB Restricted Mode bypass (CVE-2025-24200)” (2025) * Quarkslab, “Reverse Engineering Samsung S6 SBoot” (series) * Synacktiv, “Kinibi TEE: Trusted Application exploitation” (2018) * Amnesty International Security Lab, “A Digital Prison: Surveillance and the suppression of civil society in Serbia” (2024) * Amnesty International Security Lab, “Cellebrite zero-day exploit used to target phone of Serbian student activist” (2025) * GrapheneOS, “Discussion on Cellebrite Premium July 2024 documentation” (2024) * Samsung Knox, “Encryption systems description” * Google, “Titan Hardware Chip documentation” * Google, “Titan M makes Pixel 3 our most secure phone yet” (2018) * Android Source, “File-Based Encryption” * Android Source, “Full-Disk Encryption” * Bjoern Kerler, “MTKClient” — open-source tool exploiting MediaTek Boot ROM vulnerabilities
Morpheus: A new Spyware linked to IPS Intelligence
If you are an activist or journalist concerned about the security of your devices, or if your device has been seized and you need technical assistance, contact us. We have analyzed a sample of a previously unknown Android spyware, likely developed in Italy. It is named “Morpheus”, version 2025.3.0, and we describe its capabilities, including abusing accessibility features, automatically enabling ADB and issuing commands, disabling microphone and camera indicators, pairing additional WhatsApp devices, taking screenshots, recording audio and video, and more. We link part of the infrastructure to IPS Intelligence, and discover some potentially related companies, Rever Servicenet and Iris Telecomunicazioni. THE SPYWARE INFECTION As reported many times both by us and other well-documented cases by activists and other sources, the infection mechanism is the usual for low cost spyware: deny a service to the target and then social engineer them to install an app in order to restore or obtain such service. This is often applied to mobile data, but not necessarily restricted to it. In this case, the person under attack received an SMS pointing to assistenza-sim.it. The app impersonated the Fastweb ISP. FIRST STAGE: THE DROPPER The dropper uses the com.android.cored package name, with versionCode="1" and versionName="0.9.23". The dropper application is a fork of solrudev’s SimpleInstaller, an open-source rudimentary Android package installer wrapper that makes it easy to install third-party apps. The code of the installer’s io.github.solrudev.simpleinstaller.sampleapp.ui.MainActivity was edited to automate the installation of the second stage of the spyware. The second stage is directly embedded inside the APK at /assets/mobile-config.apk. Once the person under surveillance executes the dropper: 1. It checks if the second stage is already installed querying for the com.android.core package name 2. If it is not the case, it copies the mobile-config.apk from the assets folder of the APK to the device storage 3. If an external intent with action action_gustavo is received, the dropper installs the second stage 4. If the user has granted REQUEST_INSTALL_PACKAGES and READ_EXTERNAL_STORAGE permissions to the dropper, it installs the second stage Infection first stage: informing of an update Infection first stage: second stage successfully installed SECOND STAGE: THE AGENT The agent uses the com.android.core package name, with versionCode="1" and versionName="2025.3.0". Inside of the AndroidManifest.xml the application defines multiple activities, receivers and services. The most interesting are: * com.android.main.SplashScreenActivity with label Mobile Config * com.android.main.FakeServiceActivity with label Impostazioni microG alias of SplashScreenActivity, posing as a fake microG Settings icon. * com.android.main.Launcher2Activity with label PlayProtect alias of SplashScreenActivity, posing as a fake Google Play Protect icon. * com.android.main.LauncherActivity with label Mobile Config alias of SplashScreenActivity * com.android.main.MainActivity * com.android.main.AboutAppActivity, showing a generic about UI. * com.android.main.EmptyActivity * com.android.main.ForcePermissionsActivity, forcing the user to enable the required permissions. * com.android.broadcast.CoreBroadcastReceiver, a receiver with RECEIVE_BOOT_COMPLETED permission. * com.android.admin.DeviceAdminSampleReceiver, a receiver with BIND_DEVICE_ADMIN permission. * com.android.core.CoreService, a service with BIND_ACCESSIBILITY_SERVICE permission. The CoreService handles all the Accessibility actions. Accessibility Services are designed to help users with disabilities access their devices. Such applications can read the whole screen, click on graphical elements, interact with other applications. Unfortunately, this powerful capability is often exploited by malware, prompting Google to roll out a series of mitigations. The sample declares isAccessibilityTool="true" in the manifest to pose itself as a legitimate accessibility tool and to obtain the full Accessibility permission set. Starting with Android 13, apps that are sideloaded (installed outside of Google Play) are blocked from obtaining Accessibility privileges due to the Restricted Settings feature. The dropper‑installation technique circumvents this restriction, allowing the malicious app to gain the needed permissions despite the intended protection. The CoreBroadcastReceiver listens for the system’s boot‑completed broadcast, enabling the app to re‑launch automatically after a device reboot and thereby maintain persistence. The DeviceAdminSampleReceiver is the component that receives Device‑admin callbacks, allowing the application to acquire and manage Device‑admin privileges. When the person under attack launches the app, they see a screen that offers to scan for problems with either the SIM or the network connection, a phishing pretext designed to coerce them into cooperation. Once the scan finishes, the Update configurations button becomes enabled; tapping it opens the Settings page where the app requests Accessibility privileges. The second stage (agent) welcome screen TECHNIQUES ABUSING OVERLAY & ACCESSIBILITY TO BYPASS BIOMETRIC AUTHENTICATION If the preceding shenanigans weren’t alarming enough, the sheer number of permissions the app requests further confirms its malicious intent. Permissions request from the second stage The SYSTEM_ALERT_WINDOW permission is extremely powerful as it lets a malicious app draw UI elements on top of every other app and even system components. This is often abused by malware to trick the user into interacting with a legitimate-looking app while performing unwanted actions on a previously installed underlying app, such as WhatsApp. This overlay is displayed above all other UI elements, including system interfaces such as notifications, the status bar (battery indicator, time, etc.), volume level indicators, and the screenshot overlay. By analyzing where the spyware uses this overlay window we discovered that it implements various Accessibility Workflows. Each workflow consists of a sequence of steps that specify which Accessibility action to perform—e.g., clicking a button, locating a UI element by XPath or by its visible text, and so on. After granting Accessibility permissions, the spyware starts a Permission Workflow that creates an overlay with a fake update process and a fake reboot screen. In background, the workflow performs all the steps to grant all the needed permissions. This includes enabling Developer Options, turning on Wireless Debugging, and locally pairing to the ADB daemon. Conveniently, during the fake update the app disables the touchscreen by setting FLAG_NOT_TOUCHABLE on the whole full-screen overlay, leaving the user partially unable to respond to the infection. The second stage performing a fake software update The second stage displaying a fake reboot overlay Code snippet showing the workflow for granting Device Admin capabilities After the fake update, the spyware launches a second workflow called WhatsApp Workflow. This workflow shows an overlay that presents a survey asking the targeted person what problem they’re experiencing, while in the background it silently opens WhatsApp and links a new malicious device. On devices where Android fingerprint login is enabled, WhatsApp Linked Devices requires a biometric confirmation before the pairing can complete. This prevents malicious actors from adding themselves and access all the chats and messages while the phone is unlocked. However, the spyware handles this scenario by triggering WhatsApp’s biometric request in the background and displaying a fake biometric UI on the overlay. When the person under surveillance taps the fingerprint sensor on the counterfeit dialog, they unknowingly grant the spyware full access to their WhatsApp account. The agent’s overlay requiring biometric authentication, while using it to add a WhatsApp device underneath ELEVATING PRIVILEGES THROUGH ADB As explained earlier, during the Accessibility Workflow the spyware turns on Wireless Debugging and pairs itself with the ADB daemon. This gives it elevated shell privileges and is performed by the omglib-impl.jar component. The ADB connection feature is named DISPERAZIONE The agent establishes a local communication channel to ADB, and then executes a prepackaged shell script named commands.txt. The script is organized in four distinct phases, each covering a different aspect of the Android privileges it requires. In the first phase, the agent performs a series of pm grant commands to silently grant itself every dangerous runtime permission it had declared without any user prompt. WRITE_SECURE_SETTINGS and USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER (the latter normally reserved for carrier apps) are granted in the same batch. The agent then registers as a notification listener, allowlists itself from Doze (excluding itself from the battery saving mode) via cmd deviceidle whitelist, lifts every background execution restriction through appops, and finally promotes itself to Device Administrator with dpm set-active-admin. By the end of this phase the agent has unprompted access to essentially every sensitive data source on the device, unconstrained background execution, and protection against non-administrative uninstall. The second phase consists of a number of anti-detection commands. Three commands in particular are worth highlighting: cmd device_config put privacy camera_mic_icons_enabled false default settings put global package_verifier_user_consent -1 [AND_SDK>30] service call sensor_privacy 10 i32 0 i32 0 i32 1 i32 0 The first line disables the green camera and microphone indicator introduced in Android 12. The camera_mic_icons_enabled key lives in Android’s SystemUI DeviceConfig, the service managing the flag used by SystemUI to decide whether to render the indicator. This flag is not available to end-users and normal applications, but it can be performed by the shell user through ADB. The exact command line used by this sample was circulating on XDA for years. The issue was only silently fixed in Android 16, which now returns a SecurityException when setting dangerous flags. The second line disables Play Protect’s install time verifier consent. The third, guarded by an Android 11+ check, is a raw binder transaction into SensorPrivacyService, the system service backing the Quick Settings “Camera access” and “Microphone access” toggles. If the user had explicitly hit the microphone kill switch in “Quick Settings”, this one liner silently flips it back. In the third phase the spyware disables a number of known Antivirus software, including Google’s own SafetyCore, Bitdefender, Sophos, Avast, AVG, Malwarebytes, along with a handful of smaller “cleaner/antivirus” apps popular on low end devices. None of these requires root, and persists across reboots since the Android security model treats user’s installed anti-malware software like ordinary apps. In the fourth phase the sample executes per-OEM command blocks that target the battery optimization and “phone manager” packages each brand of Android distribution uses to aggressively kill background processes. Oppo/ColorOS, Samsung, Motorola, Realme, and Huawei each get their own setup. The most thorough block is for MIUI/HyperOS: the script disables roughly a dozen MIUI specific packages then issues a sequence of commands to control behaviors like autostart, background activity, background location, and lock screen display, as MIUI restricts some by default even after the equivalent AOSP permissions are granted. The MIUI block ends with a final line: settings put system locked_apps "[{\"u\":0,\"pkgs\":[\"com.android.core\"]},{\"u\":-100,\"pkgs\":[\"com.jeejen.family.miui\"]}]" locked_apps is a MIUI specific secure settings key backing MIUI’s “Lock app in Recents” feature, which pins a package against user initiated force stop from the task switcher. ATTRIBUTION “APRAFOCO”, SPAGHETTI & GOMORRA In the spyware code we found several Italian linguistic artifacts, and references to Italian pop‑culture items and television series. The sample contains a native library named libaprafocofb.so. Its name (“A pra foco”, a malapropism for “a tra poco” meaning “in a short time”) comes from a well‑known on‑air slip by journalist Luca Giurato. This library is a fork bomb (hence the fb suffix in the name) that repeatedly creates new processes to exhaust system resources, forcing a reboot. Inside the Downloader component, used to download new modules remotely from the Command-and-Control server, a class named GomorraException is used to raise network-related errors. Code snippet invoking a GomorraException with a quote from the series Second code snippet invoking a GomorraException with a quote from the series Finally, a function named spaghettiTime is present to derive an MD5 hash. TARGETS Even though the spyware appears to be made in Italy, our analysis revealed translations and artifacts for several languages, both in the on‑screen text and in the strings used by the Accessibility Workflows. Specifically, the spyware includes support for devices with the following locales: Italian, English, Spanish, Romanian, French, and Arabic. The depth of support and the set of available features, however, differ considerably from one locale to another. The spyware also has multiple customization to be able to run on different Android ROMs and OEM devices, namely: Xiaomi / Redmi / POCO (MIUI & HyperOS), Realme (realmeUI), Samsung (OneUI), OnePlus/OPPO (OxygenOS/ColorOS), Motorola / Nokia / Google (AOSP Stock, CalyxOS), and more. Finally, it’s important to highlight that the sample uses Google’s Firebase services, leaking to Google the correlation between spyware infection and the target’s Google identity, as also Spyrtacus does. THE MALWARE INFRASTRUCTURE The malware’s configuration data are stored in an encrypted format. After decryption, the payload reveals a network endpoint: [number].game‑host.org. DNS resolution for this domain returns the IP address 109.239.245.172 and listens on TCP ports 8443 and 4443. game‑host.org is one of the many domains offered by Oracle’s DNS hosting service Dyn. The IPv4 address 109.239.245.172 belongs to air2bite s.r.l. ORG‑AS1270‑RIPE, a retail Internet service provider. A search for other hosts that share the same fingerprint yields a precise set; all of the endpoints indexed by Shodan are located in Italy. While a few of these servers are hosted on networks operated by other consumer or business ISPs such as TIM, the majority reside in IP ranges owned by Mobile Service Integration. Representative examples include 195.120.31.91 and 212.210.1.211. All of the related RIPE role objects reference the same contact MSI50-RIPE, which lacks a name, physical address, or any corporate identifiers: details that are normally provided for a legitimate business. The listed e‑mail address, mobservint@gmail.com, is a free, ad‑hoc account. This combination of generic identifiers (e.g., assistenza, service, mobile, sim, internet, navigazione) and free‑mail contacts and services is a pattern frequently observed among surveillance‑technology providers and distributors. “Mobile Service Integration” name appears in many small ranges (4-16 ips), announced by TIM. This is a classic business scenario for small enterprises to have their own naming in the registry. The IPs in these ranges also host other services. For instance, 217.56.196.66 has a TLS service on port 443 that presents the following self signed certificate. * Subject: C=IT, ST=Italia, L=Lazio, O=IPS, OU=Mobile, CN=www.mcgplus.mobile.com/emailAddres The certificate’s Organization (O) attribute is explicitly set to the literal string “IPS”. Moreover, other IP addresses that exhibit the same fingerprint as the spyware, such as 2.116.18.124, show a corresponding RIPE database record that associate directly IPS with “Mobile Service Integration”, using what looks like a fake company address. Whois information for 2.116.18.120 - 2.116.18.127 linking IPS INTELLIGENCE PUBLIC SECURITY S.P.A. to Mobile Service Integration COMPANY INFORMATION In addition, the WHOIS record for the SMS‑phishing entry point assistenza-sim.it (the domain used in the phishing SMS) is as follows: Whois information for assistenza-sim.it showing Rever Srls as registrant The registration details list Rever Srls as both the registrant and administrative contact. By searching for the registrant we are directed to its website at rever‑servicenet.com. The site contains no physical address and offers only a generic description of “network‑related services”, making it impossible to verify the actual nature of the business. A query of the Italian Chamber of Commerce shows that the company is registered under VAT 16440381008 as a S.r.l.s. (società semplice) with a capital of €1,000. The sole owner is R.A.. On the same date, 09 December 2021, the same individual founded a second S.r.l.s., Iris Telecomunicazioni, registered under VAT 16440371009 with an identical capital amount. Both entities are hosted on GoDaddy; Iris Telecomunicazioni’s website iris‑telecomunicazioni.it uses the same template as Rever’s site. Iris Telecomunicazioni lists high‑profile clients such as Google and Deloitte, and includes a series of testimonials, one allegedly from the CEO of Crunchbase and another from a supposed employee, despite the company’s public records indicating that it had no employees. The same owner also holds shares in Asso Professional Services S.r.l.. Studio Carnevale, according to their website at studiocarnevale.net is an accounting and consulting firm. In their homepage, they list R.A. as part of their staff and references Asso Professional Services S.r.l. as an associated business. The business numbers published on Rever’s website appear to be fabricated: the deposited balance sheet shows an annual turnover of less than €10k. The assembly report that approved the balance sheet lists A.P. as the meeting’s secretary; she is also listed as an accountant at Studio Carnevale. It is common for small businesses to use an external accountant to fulfil statutory obligations. A separate balance sheet for IPS S.p.A. reveals that its boards of auditors is composed of accountants from Studio Carnevale as well, including A.P.. This overlap indicates that IPS and Rever employed the same accounting firm during the same reporting period (tax year 2024). Thus, IPS Intelligence hosts infrastructure related to the spyware operation, and uses “Mobile Service Integration” as a cover name for some operations. Furthermore, Rever Servicenet Srls, which allegedly registered the phishing domains, is owned by an accountant working for the same firms that has IPS Intelligence as a customer. RECOMMENDATIONS If you believe you’re an at‑risk individual or suspect you’ve been targeted, follow these steps right away. REVIEW RECENT ACTIVITY Recall anything unusual: a surprising message, a phone call, or a service outage. Did anyone ask you to install software, click a link, or share credentials? Did any of your contacts get an alert from Signal or WhatsApp that your device changed? VERIFY LINKED DEVICES ON MESSAGING APPS App How to Check WhatsApp Menu → Settings → Linked Devices Signal Menu → Linked Devices Telegram Menu → Settings → Privacy & Security → Active Sessions If anything looks off, terminate the session immediately and change the app’s PIN/password. AUDIT GOOGLE ACCOUNT SESSIONS 1. Open Google Account → Security and sign-in → Your devices. 2. Review the list of devices and locations. 3. Click Sign out on any device you don’t recognize. 4. Enable 2‑step verification for added protection. CHECK BATTERY USAGE Spyware constantly running in the background can cause noticeable battery drain. Go to Settings → Battery and review which apps are consuming the most power: unfamiliar or system‑looking apps near the top of the list are a red flag. If your phone’s battery life has become noticeably shorter, check the usage charts (where available) to identify when the drain started, as this may help pinpoint when the infection occurred. REACH OUT FOR HELP If any of the above checks raise red flags, contact us or your trusted support organization as soon as possible. IOCS IPs: * 109.239.245.172 * 195.120.31.91 * 212.210.1.211 Domains: * assistenza-sim.it and subdomains * gamehosts-621ba.appspot.com Android package names: * com.android.core * com.android.cored * com.android.corew CONCLUSION The spyware we have identified, Morpheus, follows the classic “low‑cost spyware” model: it makes up for the absence of zero‑day exploits with an elaborate social‑engineering narrative and a surprisingly large amount of effort spent supporting multiple ROMs, device models, and languages. While IPS Intelligence is a well‑known commercial surveillance provider, this is, to our knowledge, the first report linking them to the distribution and operation of spyware. Morpheus is extremely invasive: it can record audio and video, silently pair a WhatsApp device, erase evidence, and deliberately weaken the security of the infected phone, among other malicious capabilities. As repeatedly emphasized by EDRi, numerous NGOs, and other civil‑society organizations, tools of this nature should not exist. The companies that develop, sell, and operate them, as well as the entities that commission their use, must be held accountable.
April 23, 2026
Osservatorio Nessuno
Italian spyware maker SIO still developing and distributing Spyrtacus
We analyzed a 2025 sample of the Spyrtacus spyware, version 8.71. Among its capabilities it can record the screen and take screenshots, record voice calls, export WhatsApp messages, upload files, and dynamically execute downloaded modules. We confirm attribution to SIO S.p.A. and provide a small set of IoCs to detect infections of this malware family. Flowchart of the infection, control, and collection process THE SPYWARE INFECTION METHOD Like the majority of low-cost spyware, infection starts by receiving an SMS instructing the victim to install a carrier‑provided app to keep their mobile service working. The SMS contains a tinyurl.com shortened link, which, after a series of redirects, points to a phishing page that mimics the victim’s mobile provider website. The threat actor maintains pre‑made pages for all major Italian carriers. In this case the URL displays a page that imitates ho. mobile (ho‑mobile.it) and offers a download link to the malicious APK. The application itself pretends to be the ho. mobile official app, advertising a new 5G promo. This tactic is common among low‑cost spyware families that rely on coercing users into installing malicious apps rather than employing sophisticated exploit chains. Screenshot of the app information THE AGENT In our case the application used the package name com.elysium.core, while its main activity was named it.taog.app.MainActivity. The application manifest reports versionCode="871" and versionName="8.71". The app is signed with a key belonging to: CN=Aziz Oukil, OU=Unknown, O=Unknown, L=Sant'Anastasia, ST=NApoli, C=IT It is obfuscated with DexGuard 9.x. However, a string containing spyrtacus-agent can be found in the resources. The Spyrtacus name is not new; this sample is likely a newer variant of the well‑known agent used by SIO. During its first run the malware gathers device information, including IMEIs, and sends everything to a Dispatcher server via the /Dispatcher/GetParams endpoint. If no errors occur, the Dispatcher returns a set of parameters that enable or disable the spyware’s features. Some of the parameters control whether the malware: * uses FTP to collect files (and whether those files are encrypted), * records ambient audio, * takes screenshots at a configurable interval, and * installs a legitimate app as a second stage from Google Play The malware can also download additional remote modules. The modules are AES‑encrypted DEX files that are loaded from memory through Android’s InMemoryDexClassLoader. The key to decrypt the modules is retrieved along with other parameters from the Dispatcher. It is worth noting that in our sandboxed analysis we kept our sample offline, so we could not retrieve any of the module payloads. During the onboarding process the Dispatcher server also returns the IP address of a Command‑and‑Control (C2) server that the agent will use thereafter. The C2 is then reached via a multitude of protocols including FTP, MQTT(S), HTTP(S), and Google’s Firebase services. Screenshot of the app permissions ATTRIBUTION To validate the server’s certificate, the agent loads a key store embedded in the res/raw/ks file. The key store contains the following Issuer line: C=IT, CN=Artemide/Spartacus, L=Roma, O=Coliseum, ST=Unknown, OU=Lotta Greco‑Romana The same certificate is being served from an IP address belonging to AS206173 (an ISP named “NAVIGAZIONE INTERNET”, i.e., “Internet Connectivity”). This ASN is registered to SIOPLUS S.R.L. (VAT ID 10253360969), a subsidiary of SIO S.p.A.. All of SIO subsidiaries To further confirm the attribution, we downloaded the favicon of one of the C2 servers. The C2 favicon: Favicon from a Spyrtacus C2 server And the favicon from asigint[.]it, another SIO subsidiary: Favicon from the official Asigint website EXTRAS As we anticipated, the application uses Google’s Firebase services, which is common for most Android apps because Firebase is ubiquitous on the platform. In the context of spyware, however, this is noteworthy since it leaks to Google the correlation between spyware infection and the victims’ Google identity. The following are the Firebase projects used by Spyrtacus: https://assist-online.firebaseio.com https://dusty-apricot.firebasestorage.app To further corroborate the attribution, and in line with what TechCrunch previously reported about the Neapolitan dialect found in the spyware’s comments, we uncovered the following strings in the binary: * LA CODA INVIO E' VUOTA -- STATT BBUON * PARAMETRI CONNESSIONE RICEVUTI -- SCATENATE L'INFERNO! These strings reflect the developers’ native‑language comments and further tie the sample to the known SIO‑related code base. PREVIOUS SAMPLES & ANALYSIS In the past, other Spyrtacus samples were analyzed, in particular see the following list: Version 8.65 from October 2024 * https://tria.ge/241022-g6l3aatfkj/static1 Version 8.20 from April 2022 * https://tria.ge/220401-nh9xrsbaa7/behavioral1 Version unknown from 2019 * https://presidentwarfield.github.io/SpiCall_Artemide_Exodus/ * https://github.com/PresidentWarfield/SpiCall_Artemide_Exodus Apparently, a newer version of the spyware agent 8.72 exists, as documented: https://www.lawfulinterceptionacademy.eu/clir/. IOCS IPs: * 5.56.12.150 * 89.46.67.218 Domains: * supporto-mobile.it * srv.servicemnt.com Android package names: * com.elysium.core * it.taog * org.util.carriersvc * sys.base.service C2 favicon SHA256 hash: * ef2e1c47166fe0c5ab3bf5216baf6ad6b96f759e15ac218d1a1a3cdcc9e0994f CONCLUSION As previously stated, and as supported by many NGOs, mercenary spyware should simply not exist. We reiterate the call to ban these tools and hold their operators and developers accountable, and we continuously advocate for that through our contributions and participation in the EDRi network.
EDRi, an ISP, and a packed agenda
This year, Osservatorio Nessuno embarked on projects in every direction: growing our technical work, expanding our software portfolio, strengthening our advocacy, and improving our internal structure. We welcomed our first non-founding members, and we are deeply grateful for their participation. We presented the Osservatorio and both its advocacy and technical work at several events, took part in studies on NGOs and digital rights, taught classes to journalists, and contributed to work at the IETF. We showcased a pre-release of Bugbane, released and deployed Patela and then upgraded it, joined the EDRi network, researched mobile forensics tools and spyware, and launched a spin-off NGO. We also received unprecedented support: people donated funds, hardware, time, and knowledge. This collective effort made a real difference and allowed us to do more than ever before. A NEW WEBSITE As some may have noticed, we also carried out a significant website redesign and reorganization. Beyond its updated visual identity, the new website focuses on accessibility and performance. It is fully static and uses no JavaScript, allowing it to work reliably in Tor Browser even with the safest security settings, while maintaining good accessibility. We are grateful to everyone who reported accessibility issues in the past, and we remain committed to continuously reviewing and improving the website based on this feedback. PROCIONET APS Building on our experience of doing BGP from our own basement, we wanted to push for even greater independence and control. The first step, however, is navigating a complex landscape of commercial terms—peering, transit, backhaul—and engaging with a daunting number of intermediaries. While France, for instance, has a long-running tradition of nonprofit (or at least associative) ISPs, Italy has had very few examples, none of them fiber-powered. While we are not yet digging our own trenches, we aim to start by using the EU-funded Open Fiber network, pursuing economic sustainability in the short term and greater control over the longer horizon. For this purpose, together with a group of friends, we founded ProcioNet APS. For English speakers, procione means “raccoon” in Italian, hence the wordplay with the Net suffix. APS stands for something close to a Social Promotion Association, which differs from the Osservatorio’s OdV (Volunteer Organization) status. ProcioNet aims to set up a network for its members, focused on research, accessibility, and reducing the digital divide. Services will be provided exclusively to members and, where applicable, at cost price. Beyond being a technically challenging and enjoyable project, ProcioNet pursues one of Osservatorio Nessuno’s core political goals: reclaiming infrastructure. By doing so, we plan to layer internet-access–specific advocacy and research on top of it, pursuing privacy-preserving deployments where possible (an approach rarely taken by commercial providers), and resisting censorship both through technical means where feasible and through advocacy where it is not. ProcioNet logo, a raccoon on a telegraph pole EUROPEAN DIGITAL RIGHTS (EDRI) In the spring, we began the process of joining EDRi as affiliates, the first step toward becoming full members. We are very grateful to the EDRi membership team for their friendliness and for guiding us through the process, as well as to all EDRi members who supported our participation. EDRi is organized into working groups that address digital rights issues from different perspectives and through different strategies. As we do not have dedicated professional advocacy staff, we are currently focusing on issues closest to our mission, such as limiting the increase of securitization, the use of spyware against civil society, and efforts to weaken or bypass encryption, including initiatives like Chat Control. We are still new to this space, and observing how the broader civil society ecosystem operates has been highly instructive. We hope to deepen our involvement and participate more actively, including in more in-person meetings, throughout 2026. SO MANY EVENTS This year, members of Osservatorio Nessuno took part in a wide range of events, from academic cryptography conferences to documentary and journalism festivals, from self-organized gatherings to international standards bodies. Almost all of them were self-funded by the attending members, with only a few exceptions linked to our professional work. Despite limited resources, we managed to attend, contribute, and learn across communities that rarely meet in the same room. Through these experiences, we observed how cost, travel, and accessibility shape who can be in the room and, by extension, who helps shape the technologies and policies that define the Internet itself. Most of this is not new; it’s been well studied and reported by other NGOs and researchers. This is simply our firsthand account! We chose events based on a mix of personal interest, existing community ties, whether we knew people or trusted the atmosphere, and relevance to our advocacy and networking work as an organization. To reiterate, we did not use any Osservatorio funds for these trips. We are all volunteers, and our limited organizational finances are fully dedicated to maintaining our infrastructure, servers, utilities, and bandwidth, which already keeps our budget tight. Event Type Area Location Participants Ticket (€) Cost estimate (€) Total (€) FOSDEM Community Open-source Brussels 2 0 400 800 Real World Crypto Academic Cryptography Sofia 1 380 500 880 IT NOG Community Networking Bologna 1 0 100 100 SGKM Academic Media studies Chur 1 290 600 890 Hackmeeting Community Activism / Tech Cagliari 3 0 150 450 TumpiCon Private Security Pinerolo 3 0 200 600 Global Gathering Community Advocacy Estoril 2 40 500 1080 DIG Festival Community Journalism Modena 1 0 100 100 Romhack Community Security Roma 1 20 300 320 EDRi Privacy Camp Community Advocacy Brussels 1 0 300 300 Tor Community Gathering Community Tor Odense 2 0 400 800 RIPE Int’l Org Networking Bucharest 1 400 900 1300 Transparency.dev Community Development Gothenburg 1 0 500 500 Linux Day Community Open-source Torino 1 0 0 0 IETF Int’l Org Standards Montreal 1 990 1600 2590 39C3 Community Activism / Tech Hamburg 4 190 600 3160 See the Tor Projects’s blog post for a summary of the Tor Community Gathering and a bonus picture. This table does not include all the events where we were invited to participate, or which were remote, such as presenting at Nexa Center, or at Primavera Hacker, where we gave a talk remotely. REFLECTIONS ON ACCESS AND INEQUALITY One recurring observation is that the further one moves from grassroots or volunteer-driven events, the higher the barriers to entry. Events like IETF, RIPE, or Real World Crypto, while essential, remain prohibitively expensive for unaffiliated participants. High registration fees, travel costs, and luxury venues make it difficult for small nonprofits, activists, or independent researchers to take part. This reinforces existing power structures and limits diversity in technical governance spaces. Travel funds and scholarships often serve to fill inclusion quotas, not to change the underlying structures or power dynamics. Their existence is, of course, welcome, but their impact is limited, especially in contexts like RIPE, where votes determine policy, or the IETF, where consensus often forms in side meetings and informal gatherings. We would rather see less luxury and more accessibility: * no expensive cities or venues that are hard to reach or require difficult visas (why does the IETF still meet in the US or China?), * membership fees adjusted for nonprofits, * academic conferences free for students and affordable for small organizations, * an end to extravagant dinners and shows that exclude more than they include. POLITICS OF PARTICIPATION Building authority in these spaces takes both years and connections. Employers, institutional backing, or professional titles often matter far more than anyone admits. Social backgrounds are downplayed or dismissed, and the result is often an insular bubble of tech workers who, despite good intentions, can become detached from the realities faced by underrepresented people. Worse, this detachment is sometimes masked by corporate narratives about improving the world through technology. The dissonance, even for us as relatively privileged Italian technologists, is difficult and at times sad to navigate. CONCLUSION ProcioNet isn’t quite ready to launch yet. We’re currently dealing with a substantial amount of paperwork and planning, as the operation is neither simple nor inexpensive. There are also a couple of developments we can’t announce just yet, but they build directly on the work we carried out this year. As in the past few years, we’ll be around at 39C3, and we’ll also be back with a talk at FOSDEM, this time presenting Bugbane (see the schedule).
December 25, 2025
Osservatorio Nessuno
Italy's intelligence oversight committee (COPASIR) report on Graphite spyware raises more questions than it answers
The long-awaited report by the Italian Parliamentary Committee for the Security of the Republic (COPASIR) on the use of Graphite spyware is now public. Yet rather than clarifying events, the document raises further concerns about government accountability, the cost of surveillance, and the extent of state overreach. Below we highlight some of the most troubling findings. The full report is available on the website of the Italian Parliament (in Italian). COPASIR Graphite report TARGETING A HUMANITARIAN NGO FOR FIVE YEARS The report confirms that Luca Casarini, a prominent figure in the humanitarian NGO Mediterranea Saving Humans, was intermittently placed under surveillance for at least five years. Initially, traditional methods were used; under the current government, however, the highly invasive Graphite spyware was deployed. Mediterranea is no secretive organization: its search and rescue missions in the Mediterranean are conducted under the watch of international observers and journalists. This raises serious questions about what could justify such a prolonged and intrusive operation targeting an organization whose goals and methods are transparent and lawful. The mismatch between the invasive tools employed, the years-long duration of the operation, and the meager investigative results is alarming — and difficult to justify. AN INCONSISTENT GOVERNMENT NARRATIVE The Italian government has made conflicting and shifting statements regarding the spyware scandal. At first, it downplayed the existence of any victims; then, it acknowledged that contracts with the Israeli spyware vendor Paragon were still in effect. Later, it claimed the contracts had been suspended. According to Haaretz, Prime Minister Giorgia Meloni even contacted Netanyahu directly to seek clarification. The COPASIR report, however, offers a different account: it states that the contract was unilaterally terminated by the Italian intelligence agencies, contradicting the government’s earlier version of events. IS COPASIR TRUSTING GRAPHICAL INTERFACES? The report devotes considerable attention to the “traceability” of actions carried out using Graphite spyware: > Another legal issue related to the use of modern interception technologies, as > emerged during hearings, is that data are saved in non-deletable databases by > the public agencies using the system, unless the service provider is involved > in the deletion process (p. 23, translation from Italian) > According to the information gathered by the Committee during its inquiry, > every use of the Graphite spyware is logged: the operator must authenticate > with a username and password, and each operation is recorded in a database or > “acquisition log” and in an audit register. The database is located on the > client’s premises, collects information about the target, and is not > accessible to the company. The audit log, which is also hosted on servers > located at the client, records all operations and system accesses, including > technical access for maintenance or updates by the company. Furthermore, data > in the database can be deleted by the client, but audit logs cannot be altered > by the client. During site visits to the agencies on May 7, 2025, the > Committee specifically requested and obtained assurances that the contents of > the operations would not be accessible to Paragon Solutions. (p. 13, > translation from Italian) But such assurances are fragile. The absence of a graphical interface to modify audit logs does not guarantee their immutability. If the audit system is under the client’s control, anyone with sufficient access could tamper with it—especially given that several months passed between the initial media exposure (January 31) and the start of any formal investigation. Only an independent forensic analysis could credibly verify the integrity of these logs. One striking example is the case of journalist Francesco Cancellato, officially deemed not to have been targeted, according to COPASIR. The explanation offered is that his device appeared in the detection results due to “false positives.” Yet his phone was not the only one affected, as multiple members of his newsroom also showed signs of compromise. Is it reasonable to expect private citizens or NGOs to provide definitive “proof” in cases where the very nature of spyware is to remain invisible, leave no trace, and render verification nearly impossible? This dynamic shifts the burden of proof to the victim, while conveniently sparing those with full operational control and privileged access from further scrutiny. The naïveté of such claims would be ironic, if not outright offensive, given the double standards they reveal. Authorities would never settle for a graphical confirmation in lieu of a forensic audit if it were a citizen or activist under investigation. Yet here, the possibility of tampering isn’t even considered. Victims and overburdened NGOs (often assisting hundreds of cases worldwide) are expected to conduct even deeper forensic investigations, despite the abundance of circumstantial and corroborating evidence: multiple infected journalists, a Meta notification, and partial independent confirmation by Citizen Lab. AN EXTORTION-BASED BUSINESS MODEL One passage from the report is particularly alarming: > Phone numbers with an Italian prefix are not among those contractually > excluded from being subjected to surveillance through Graphite spyware. (p. > 18, translation from Italian) In plain terms: to prevent Italian citizens from being spied on by Paragon’s foreign clients, the Italian state must pay. The only way to exempt a country code from the list of potential surveillance targets is to negotiate and pay for a contractual exclusion. This reveals a business model based on extortion: if a government doesn’t pay, its citizens remain vulnerable to being targeted by foreign governments using Paragon’s tools. UPDATE – JUNE 10 In the meantime, Paragon has publicly responded to the COPASIR investigation, claiming it had offered technical cooperation to Italian authorities to verify whether its spyware had been used against Francesco Cancellato, and that it terminated its contract with Italy after the authorities declined to proceed. These statements should be treated with caution, as Paragon is a directly involved party with a clear interest in protecting its commercial image. However, on one point we agree: the investigation into the Fanpage journalists remains inadequate. And once again, we see conflicting versions from Paragon and the Italian government, raising more questions than they answer. CONCLUSION Once again, advanced surveillance tools are being used against activists and journalists, not just in the exceptional cases that are often cited to justify their deployment. As previous cases in Poland, Spain, Greece, and elsewhere have shown, often in democratic countries spyware is used to target dissenting or inconvenient voices—with enormous financial costs, dubious investigative outcomes, and serious risks to global cybersecurity. The Italian government must take responsibility, provide full transparency on the actual use of Graphite, and immediately end all contracts with companies like Paragon. The European Union should act—as urged by Citizen Lab—to restrict the use of such technologies, ban their production within Europe, and sanction the companies involved.
Patela: A basement full of amnesic servers
The Osservatorio has finally activated its first experimental nodes on a diskless infrastructure, physically hosted in our own space and designed for low power consumption. In this post, we explain the reasons that led us to work on this project and the implementation we developed. We are also releasing the source code and documentation for the software we wrote, which we will continue to improve and which we hope will be useful for replicating our setup.
Patela: A basement full of amnesic servers
The Osservatorio has finally activated its first experimental nodes on a diskless infrastructure, physically hosted in our own space and designed for low power consumption. In this post, we explain the reasons that led us to work on this project and the implementation we developed. We are also releasing the source code and documentation for the software we wrote, which we will continue to improve and which we hope will be useful for replicating our setup. MOTIVATIONS AND THREAT MODEL As we’ve often pointed out, running Tor nodes involves certain risks and fairly common issues—often due to the fact that, in the event of investigations or other problems, the authorities are not always competent enough to understand how Tor works, or, even if they are, they may still choose to act indiscriminately despite knowing they’re not targeting the actual party under investigation. There are many precedents: in Austria, in Germany, in the United States, in Russia, and likely many others. Some of our members have personally experienced that this can also be the case in Italy. In order to protect ourselves, our infrastructure, and the anonymity and privacy of our users, we must therefore consider a range of possible scenarios, including: * Attempts to disrupt our operations * Seizure of servers and data analysis * Physical compromise of the servers * Remote compromise of the servers In the first case, the main obstacle is the constant stream of abuse reports and complaints about the activity of our network. In order to ensure our operations, as we’ve mentioned in previous posts, we now manage our own network with IP addresses we own, routed directly to our physical location—minimizing, as much as technically possible (for now!), the number of intermediaries with access or control over our infrastructure. Since the beginning of the project, we’ve followed two main intuitions: the first is that by approaching classic problems in less conventional ways, we might find solid solutions and also pave the way for other organizations and projects (like buying a physical space!). The second is that, to keep interest alive, both among our members and externally, our activities must be fun, engaging, and innovative. NETWORK INFRASTRUCTURE As already mentioned, we operate a router at a datacenter in Milan that announces our AS and IP space. It is currently connected to our basement via an XGS-PON 10G/2.5G link, but our goal is to expand our presence geographically and, where possible, reuse the same network resources (we’ll share more updates on this soon). Network infrastructure diagram. One of the key elements of this architecture is that we only trust machines to which we have exclusive access. This means that even our main router at the MIX in Milan is considered potentially untrustworthy. For this reason, our main focus is on our datacenter in Turin. DISKLESS INFRA AND SYSTEM TRANSPARENCY System Transparency is a project originally funded by Mullvad for their VPN infrastructure, and now actively developed and maintained by Glasklar Teknik. The goal of the project is to develop a set of tools to run and certify transparent systems. The idea is as follows: first, system images must be reproducible—that is, ISO files or similar images should be bit-for-bit rebuildable by anyone from source code, in order to prove the absence of tampering (or backdoors). Second, everything needed to reproduce these images must be public and well-documented, as should the images themselves. Finally, at least two additional properties must be ensured: first, only authorized system images should be allowed to run; second, there must be a public, immutable list of all authorized images (a so-called transparency log). To summarize, in sequence, the concept of system transparency requires: * Building the system in a reproducible way * Distributing all materials and instructions needed for reproduction * Signing system images with securely stored keys * Submitting all signatures to a transparency log Among the various tools provided by the System Transparency project, stboot does most of the heavy lifting. The server boots from a minimal local image which, thanks to stboot, downloads and verifies the next stage: a reproducible and signed system image intended to run Tor (or, in the future, other services). Because of the signature verification, we can safely host these images remotely or in the cloud without major security concerns. stboot boot screenshot. Since the diskless system is still experimental—and although our goal is to make the entire infrastructure easily replaceable—we still run a few services and devices in a more traditional setup: * Maintenance VPN server on a separate network, used for remote administrator access. * DHCP server: only internal IPs are assigned from a private network range and used for debugging and maintenance. * DNS server: best practices from the Tor project recommend running a local DNS resolver to reduce the risk of traffic analysis via domain resolution. In a Tor connection, exit nodes are responsible for resolving domains. For this reason, we’ve set up our own local recursive DNS server. * HTTP server: used to serve the operating system image to the servers. * Managed switch: we’ve been gifted a beautiful managed switch! Many thanks to those who chose to support us in this way! PATELA The problem with diskless software is that it doesn’t remember anything—not even the few configurations or keys needed to function correctly. In our case, there are just a few essential configurations for a Tor relay: * Tor’s configuration file, /etc/torrc * The relay’s identity keys, /lib/tor/keys/* * Various network settings (IP and NAT) These configurations also need to be generated on the machine and updated later. For example, we need to be able to update the list of nodes that make up our family. Clearly, maintaining a separate OS image for each machine would be both impractical and hard to maintain. While tools like ansible-relayor exist, we chose a different approach based on practical and security considerations. We prefer each node to generate its own keys and manage its own configuration, and for the configuration to be applied in pull mode rather than push. In other words, the node itself periodically checks for configuration updates, and only the node should have control over its keys. This is an important security distinction: a compromised configuration server should not be able to affect the security of the node or its keys. And that’s how patela was born. Patela is a minimal software tool that downloads and uploads configuration files to a server. The server communicates network configurations (primarily assigning available IPs and the gateway via an API), and the client reads and applies them. All other files that would normally need to persist between reboots are encrypted locally using the TPM and then uploaded in encrypted form to the configuration server. This way, the configuration server never has access to the machine’s keys and cannot directly compromise it—except possibly through Denial of Service, such as distributing invalid IPs or corrupted backups. The system offers the following advantages: * Resistance to certain physical attacks, as encryption keys are stored in the TPM * Anti-forensic by default, since no data is stored on disks or persistent media * Nodes can be reset by reinitializing the TPM * In the future, we could perform remote attestation to certify that the running system images match those we published * With remote attestation, TPM unsealing could happen only if the system image is genuine, ensuring a strong chain of trust Logical diagram of patela. RUST AND TOOLS Since Tor is being rewritten in Rust, and will soon offer everything needed to replace the classic C-Tor implementation even for relays, we decided to align with this and adopt the same language for better future compatibility. During development, it became clear that a flexible toolchain was essential, especially given the need to use C libraries and support multiple platforms. While patela’s architecture isn’t conceptually very complex, making a piece of software like this maintainable over time, with so many components, is no easy task. Fortunately, the Rust ecosystem and its tooling have matured significantly in recent years, now offering almost everything we need. In practice, we aim to build both a client and a server, and we need: * A database, for the server * A library to download and upload resources, for the client * External libraries (TPM, mTLS, crypto, etc.) * Compatibility with multiple 64-bit architectures, for the client (arm64, x86_64) * For the client, the ability to cross-compile with the target system’s libraries Containers are often used to meet requirements like ecosystem consistency. However, our goal is to build a simple, lightweight architecture that works on low-power machines and can modify global network configurations. There are also several things we explicitly want to avoid, some due to personal preference, others based on our chosen constraints: * Splitting the project into many components, libraries, or subprojects, which leads to extra maintenance overhead * Client and server, while performing different roles, mostly rely on the same libraries and data structures * The compiled binary is the only required file: no packages or archives. And with System Transparency, dynamic linking wouldn’t help either—we would still need to rebuild the system image for every update * Writing a Makefile to cover all these goals would likely be longer and more complex than writing the project itself And here are the projects that helped us achieve all of this with just a few lines of code and relatively little effort: * cargo: the package manager that just works * clap: a solid foundation for building command-line tools * sqlx: a small, simple, and elegant SQL library * actix web: a well-known and mature web framework * constgen: lets us embed constants at compile-time, avoiding external archive management * cargo zigbuild: integrates the Zig compiler with cargo, making cross-compilation straightforward * rustls: pure joy compared to communicating directly with OpenSSL COMPILATION AND CONFIGURATION Once the patela binary is compiled—with all required assets included—it’s enough to copy it into the system image before signing and distributing it. As mentioned earlier, we use constgen, which makes it easy to generate compile-time constants, for example, embedding the client’s SSL certificates and the Tor configuration template. let server_ca_file = env::var("PATELA_CA_CERT").unwrap_or(String::from("../certs/ca-cert.pem")); let client_key_cert_file = env::var("PATELA_CLIENT_CERT").unwrap(); let server_ca = fs::read(server_ca_file).unwrap(); let client = fs::read(client_key_cert_file).unwrap(); let const_declarations = [ const_declaration!(pub SERVER_CA = server_ca), const_declaration!(pub CLIENT_KEY_CERT = client), ] .join("\n"); Although cargo supports cross-compilation, when using external C dependencies like tpm2-tss, we must ensure that the libc used during compilation is compatible with the one present in our system images. As mentioned earlier, the Zig compiler—integrated directly with cargo via cargo-zigbuild—allows us to specify the target libc version, along with the architecture and kernel: $ cargo zigbuild --target x86_64-unknown-linux-gnu.2.36 NETWORK We’ve previously discussed how to run multiple Tor servers on the same network interface with different IPs using a high-level firewall like Shorewall. Now we’ve applied the same rules using nftables, the native Linux interface for writing network rules. Two rules are required: one to match packets by user ID, and another to configure source NAT. $ nft 'add rule ip filter OUTPUT skuid <process id> counter meta mark set <mark id>' $ nft 'add rule ip filter <interface> mark and 0xff == <mark id> counter snat to <source ip>' The rules are therefore applied directly by patela, using the nftl library. BISCUITS, MTLS AND TPM We use Mutual TLS (mTLS) for communication. Unlike traditional TLS, where only the client verifies the server, mTLS involves mutual authentication. This offers a double benefit and elegantly solves multiple problems: on the one hand, TLS natively provides transport security and certificate revocation mechanisms; on the other, client certificate authentication allows us to uniquely identify each node or machine. We can then save and track metadata such as the assigned IP, name, and other related info in the server’s database. The main drawback of mTLS is managing certificates and their renewal. Everyone gets one bold choice per project — otherwise, where’s the fun? Ours was Biscuit, a token-based authentication system similar to JWT. The only reason we use a session token is to avoid authenticating every single API endpoint. On the client side, the magic lies in the TPM. Libraries and examples are often sparse, and working with TPMs can be frustrating. In our case, we need a key to survive across reboots, because it’s the only persistent element on the server. We use a Trust On First Use (TOFU) approach: on first boot, the client generates a primary key inside the TPM and uses it to encrypt a secondary AES-GCM key, which is used to encrypt configuration backups. The AES-GCM key is then stored on the server, encrypted with the TPM. This means only the physical node can decrypt its backup. To revoke a compromised node, we simply delete its encrypted key from the server. The logic for detecting whether a TPM has been initialized runs entirely on the client and is implemented in patela. In the future, directly integrating relay long-term keys with arti could be a better and more efficient solution, especially if combined with a robust measured boot process to control unsealing. FUTURE WORK This post summarizes what we consider just the first phase of our project. We know there’s still a lot to do and improve, and we’d like to share our current wishlist: * Open source network stack: both in our Milan exchange point and in our datacenter we use routers running proprietary software (Mikrotik CCR2004-1G-12S+2XS and Zyxel XGS1250-12). We’d love to convert both to open source software on open hardware. * Open source Cantina-OS: for now we’ve only published the patela code, but we’ll soon release our OS image configurations too. * Better certificate management: right now, we recompile patela for each physical node to embed the correct TLS certificate. We’d like to switch to a shared client certificate and move authentication to the TPM via remote attestation. This would simplify update workflows and enable attestation even for virtual machines. IN PRACTICE We’ve launched four exit nodes, running with patela and System Transparency: * murazzano * montebore * robiola * seirass All four are running on a single Protectli with coreboot, pushing over 1 Gbps of effective total bandwidth. The Protectli machine in our basement.
5x1000 Donation Campaign: Fiscal Year 2024
2024 was a year full of good intentions — and, incredibly, also of many concrete results! Some we had envisioned long ago, others emerged along the way. From the beginning, our goal was to experiment in order to increase the number of Tor exit nodes in Italy. To be honest, we haven’t deployed many yet, but we’ve laid solid foundations for the future: we became an Autonomous System (AS214094) we acquired IP addresses and we can now deploy fiber across Italy In short, we’re very close to becoming a full-fledged network operator.
March 30, 2025
Osservatorio Nessuno
5x1000 donation campaign: Fiscal year 2024
How to insert Fiscal Code inside 5x1000 2024 was a year full of good intentions — and, incredibly, also of many concrete results! Some we had envisioned long ago, others emerged along the way. From the beginning, our goal was to experiment in order to increase the number of Tor exit nodes in Italy. To be honest, we haven’t deployed many yet, but we’ve laid solid foundations for the future: * we became an Autonomous System (AS214094) * we acquired IP addresses * and we can now deploy fiber across Italy In short, we’re very close to becoming a full-fledged network operator. But Tor has never been our only goal. We’ve never set boundaries for ourselves, other than doing what we believe is right and what we genuinely enjoy. Over the past year, we have: * contributed to investigative journalism * conducted independent research on surveillance in Italy In the coming months, our infrastructure dedicated to Tor will be ready, based on a fully open source and reproducible architecture. We’re working on several research projects that we plan to publish soon, and we can’t wait to get out of our basement and share our adventures. YOU CAN SUPPORT US TOO Right now, there’s an easy way to support us at no cost to you. When filing your taxes in Italy, simply list our tax code as your 5x1000 beneficiary: 97871010019 Thank you for being with us — and for believing in what we do.
March 30, 2025
Osservatorio Nessuno
A deep dive into Cellebrite: Android support as of February 2025
In the previous blog post, we summarized part of the Cellebrite product history, and grasped some insights on the market of surveillance software and equipment aimed at mobile forensics. In this blog post, we will explore the current unlocking capabilities, as per their February 2025 documentation distributed to customers. We’ll also introduce some concepts and terminology, and hint at basic mitigations, though proper follow up will come in subsequent posts.
March 16, 2025
Osservatorio Nessuno
A deep dive into Cellebrite: how it came to be
The widespread use of Cellebrite software is not a secret: we mentioned it very recently, as did Amnesty in their recent report covering abuses towards civil society and detailing vulnerabilities exploited. This blogpost is the first in a series of two: here we’ll explore the general history and development of the company, while in the second one we will provide a more detailed list of its capabilities updated as of February 2025.
March 16, 2025
Osservatorio Nessuno