diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index a0c0a0bb7..9200053c6 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -81,6 +81,7 @@
- [Basic Python](generic-methodologies-and-resources/python/basic-python.md)
- [Threat Modeling](generic-methodologies-and-resources/threat-modeling.md)
- [Blockchain & Crypto](blockchain/blockchain-and-crypto-currencies/README.md)
+ - [Defi/AMM Hook Precision](blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md)
- [Lua Sandbox Escape](generic-methodologies-and-resources/lua/bypass-lua-sandboxes/README.md)
# đ§ââïž Generic Hacking
@@ -769,7 +770,7 @@
- [Stack Shellcode - arm64](binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md)
- [Stack Pivoting - EBP2Ret - EBP chaining](binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
- [Uninitialized Variables](binary-exploitation/stack-overflow/uninitialized-variables.md)
-- [ROP & JOP](binary-exploitation/rop-return-oriented-programing/README.md)
+ - [ROP and JOP](binary-exploitation/rop-return-oriented-programing/README.md)
- [BROP - Blind Return Oriented Programming](binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md)
- [Ret2csu](binary-exploitation/rop-return-oriented-programing/ret2csu.md)
- [Ret2dlresolve](binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md)
@@ -846,7 +847,6 @@
- [ios Heap Exploitation](binary-exploitation/ios-exploiting/ios-example-heap-exploit.md)
- [ios Physical UAF - IOSurface](binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md)
-
# đ€ AI
- [AI Security](AI/README.md)
- [Ai Assisted Fuzzing And Vulnerability Discovery](AI/AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md)
@@ -895,7 +895,6 @@
- [RC4 - Encrypt\&Decrypt](crypto-and-stego/rc4-encrypt-and-decrypt.md)
- [Stego Tricks](crypto-and-stego/stego-tricks.md)
- [Esoteric languages](crypto-and-stego/esoteric-languages.md)
-- [Blockchain & Crypto Currencies](crypto-and-stego/blockchain-and-crypto-currencies.md)
# âïž TODO
diff --git a/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md b/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md
index 8c95ff088..3fe76d70c 100644
--- a/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md
+++ b/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md
@@ -3,7 +3,7 @@
{{#include ../../banners/hacktricks-training.md}}
-## The Bug
+## La faille
Vous avez une [great explanation of the vuln here](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), mais en résumé :
@@ -31,7 +31,7 @@ msg_labels_t msgh_labels;
typedef mach_msg_mac_trailer_t mach_msg_max_trailer_t;
#define MAX_TRAILER_SIZE ((mach_msg_size_t)sizeof(mach_msg_max_trailer_t))
```
-Ensuite, lorsque l'objet trailer est généré, seuls certains champs sont initialisés, et la taille maximale du trailer est toujours réservée :
+Puis, lorsque l'objet trailer est généré, seuls certains champs sont initialisés, et la taille maximale du trailer est toujours réservée :
```c
trailer = (mach_msg_max_trailer_t *) ((vm_offset_t)kmsg->ikm_header + size);
trailer->msgh_sender = current_thread()->task->sec_token;
@@ -41,7 +41,7 @@ trailer->msgh_trailer_size = MACH_MSG_TRAILER_MINIMUM_SIZE;
[...]
trailer->msgh_labels.sender = 0;
```
-Puis, par exemple, lorsqu'on tente de lire un mach message en utilisant `mach_msg()`, la fonction `ipc_kmsg_add_trailer()` est appelée pour ajouter le trailer au message. à l'intérieur de cette fonction, la taille du trailer est calculée et certains autres champs du trailer sont remplis :
+Par exemple, lorsqu'on tente de lire un mach message en utilisant `mach_msg()`, la fonction `ipc_kmsg_add_trailer()` est appelée pour ajouter le trailer au message. à l'intérieur de cette fonction, la taille du trailer est calculée et certains autres champs du trailer sont remplis :
```c
if (!(option & MACH_RCV_TRAILER_MASK)) { [3]
return trailer->msgh_trailer_size;
@@ -51,9 +51,9 @@ trailer->msgh_seqno = seqno;
trailer->msgh_context = context;
trailer->msgh_trailer_size = REQUESTED_TRAILER_SIZE(thread_is_64bit_addr(thread), option);
```
-Le paramÚtre `option` est contrÎlé par l'utilisateur, donc **il est nécessaire de fournir une valeur qui satisfait la condition `if`.**
+Le paramÚtre `option` est user-controlled, donc **il est nécessaire de fournir une valeur qui satisfait le `if` check.**
-Pour passer cette vérification, nous devons envoyer un `option` pris en charge valide :
+Pour passer cette vérification, nous devons envoyer un `option` valide et pris en charge :
```c
#define MACH_RCV_TRAILER_NULL 0
#define MACH_RCV_TRAILER_SEQNO 1
@@ -67,7 +67,7 @@ Pour passer cette vérification, nous devons envoyer un `option` pris en charge
#define MACH_RCV_TRAILER_ELEMENTS(x) (((x) & 0xf) << 24)
#define MACH_RCV_TRAILER_MASK ((0xf << 24))
```
-Mais, puisque `MACH_RCV_TRAILER_MASK` ne fait que vérifier des bits, nous pouvons passer n'importe quelle valeur entre `0` et `8` pour ne pas entrer dans le `if`.
+Mais, parce que le `MACH_RCV_TRAILER_MASK` vérifie simplement des bits, nous pouvons passer n'importe quelle valeur entre `0` et `8` pour ne pas entrer dans l'instruction `if`.
Ensuite, en continuant avec le code, vous pouvez trouver :
```c
@@ -92,19 +92,19 @@ ipc_kmsg_munge_trailer(trailer, real_trailer_out, thread_is_64bit_addr(thread));
return trailer->msgh_trailer_size;
```
-Comme on peut le voir, si `option` est supérieur ou égal à `MACH_RCV_TRAILER_AV` (7), le champ **`msgh_ad`** est initialisé à `0`.
+On peut voir que si `option` est supérieur ou égal à `MACH_RCV_TRAILER_AV` (7), le champ **`msgh_ad`** est initialisé à `0`.
-Si vous avez remarqué, **`msgh_ad`** était encore le seul champ du trailer qui n'était pas initialisé auparavant et qui pouvait contenir un leak provenant d'une mémoire précédemment utilisée.
+Si vous avez remarqué, **`msgh_ad`** était encore le seul champ du trailer qui n'avait pas été initialisé auparavant et qui pouvait contenir un leak provenant d'une mémoire utilisée précédemment.
-Donc, pour éviter de l'initialiser, il suffit de passer une valeur `option` égale à `5` ou `6`, ainsi elle passe le premier test `if` et n'entre pas dans l'`if` qui initialise `msgh_ad`, parce que les valeurs `5` et `6` n'ont aucun type de trailer associé.
+Donc, pour éviter de l'initialiser, il faut passer une valeur `option` égale à `5` ou `6`, de sorte qu'elle passe le premier test `if` et n'entre pas dans le `if` qui initialise `msgh_ad`, car les valeurs `5` et `6` n'ont aucun type de trailer associé.
### PoC basique
-Dans le [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), il y a un PoC pour simplement leak quelques données aléatoires.
+Inside the [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), vous avez un PoC pour simplement leak des données aléatoires.
-### PoC pour leak d'une adresse kernel
+### PoC pour leak d'adresse kernel
-Dans le [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), il y a un PoC pour leak une adresse kernel. Pour cela, un message rempli de structures `mach_msg_port_descriptor_t` est envoyĂ© car le champ `name` de cette structure en userland contient un unsigned int alors qu'en kernel le champ `name` est un pointeur vers la structure `ipc_port`. Par consĂ©quent, envoyer des dizaines de ces structures dans le message cĂŽtĂ© kernel revient Ă **ajouter plusieurs adresses kernel Ă l'intĂ©rieur du message** afin que l'une d'elles puisse ĂȘtre leakĂ©e.
+Inside the [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), vous avez un PoC pour leak une adresse kernel. Pour cela, un message rempli de structures `mach_msg_port_descriptor_t` est envoyĂ© dans le message car le champ `name` de cette structure en userland contient un unsigned int mais en kernel le champ `name` est un pointeur vers une struct `ipc_port` en kernel. Par consĂ©quent, envoyer des dizaines de ces structs dans le message cĂŽtĂ© kernel revient Ă **ajouter plusieurs adresses kernel Ă l'intĂ©rieur du message** afin que l'une d'elles puisse ĂȘtre leakĂ©e.
Des commentaires ont été ajoutés pour une meilleure compréhension :
```c
diff --git a/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md b/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md
index a8ba8af3a..4b524b8b0 100644
--- a/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md
+++ b/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md
@@ -3,109 +3,108 @@
{{#include ../../banners/hacktricks-training.md}}
-## Atténuations des exploits iOS
+## iOS Exploit Mitigations
- **Code Signing** in iOS works by requiring every piece of executable code (apps, libraries, extensions, etc.) to be cryptographically signed with a certificate issued by Apple. When code is loaded, iOS verifies the digital signature against Appleâs trusted root. If the signature is invalid, missing, or modified, the OS refuses to run it. This prevents attackers from injecting malicious code into legitimate apps or running unsigned binaries, effectively stopping most exploit chains that rely on executing arbitrary or tampered code.
- **CoreTrust** is the iOS subsystem responsible for enforcing code signing at runtime. It directly verifies signatures using Appleâs root certificate without relying on cached trust stores, meaning only binaries signed by Apple (or with valid entitlements) can execute. CoreTrust ensures that even if an attacker tampers with an app after installation, modifies system libraries, or tries to load unsigned code, the system will block execution unless the code is still properly signed. This strict enforcement closes many post-exploitation vectors that older iOS versions allowed through weaker or bypassable signature checks.
-- **Data Execution Prevention (DEP)** marque des rĂ©gions mĂ©moire comme non-exĂ©cutables Ă moins qu'elles ne contiennent explicitement du code. Cela empĂȘche les attaquants d'injecter du shellcode dans des rĂ©gions de donnĂ©es (comme la stack ou le heap) et de l'exĂ©cuter, les forçant Ă recourir Ă des techniques plus complexes comme ROP (Return-Oriented Programming).
-- **ASLR (Address Space Layout Randomization)** randomise les adresses mĂ©moire du code, des bibliothĂšques, de la stack et du heap Ă chaque dĂ©marrage. Cela rend beaucoup plus difficile pour un attaquant de prĂ©dire oĂč se trouvent des instructions ou gadgets utiles, cassant de nombreuses chaĂźnes d'exploit qui dĂ©pendent de dispositions mĂ©moire fixes.
-- **KASLR (Kernel ASLR)** applique le mĂȘme concept de randomisation au kernel iOS. En dĂ©plaçant l'adresse de base du kernel Ă chaque boot, il empĂȘche les attaquants de localiser de maniĂšre fiable les fonctions ou structures du kernel, augmentant la difficultĂ© des exploits au niveau kernel qui chercheraient Ă obtenir un contrĂŽle complet du systĂšme.
-- **Kernel Patch Protection (KPP)** aussi connu sous le nom **AMCC (Apple Mobile File Integrity)** dans iOS, surveille en continu les pages de code du kernel pour s'assurer qu'elles n'ont pas Ă©tĂ© modifiĂ©es. Si toute altĂ©ration est dĂ©tectĂ©e â comme un exploit tentant de patcher des fonctions du kernel ou d'insĂ©rer du code malveillant â l'appareil panique et redĂ©marre immĂ©diatement. Cette protection rend les exploits persistants du kernel beaucoup plus difficiles, car les attaquants ne peuvent pas simplement hooker ou patcher les instructions du kernel sans provoquer un crash systĂšme.
-- **Kernel Text Readonly Region (KTRR)** est une fonctionnalitĂ© matĂ©rielle introduite sur les appareils iOS. Elle utilise le contrĂŽleur mĂ©moire du CPU pour marquer la section code (text) du kernel comme dĂ©finitivement en lecture seule aprĂšs le boot. Une fois verrouillĂ©e, mĂȘme le kernel lui-mĂȘme ne peut pas modifier cette rĂ©gion mĂ©moire. Cela empĂȘche les attaquants â et mĂȘme le code privilĂ©giĂ© â de patcher les instructions du kernel Ă l'exĂ©cution, fermant une grande classe d'exploits qui reposaient sur la modification directe du code du kernel.
-- **Pointer Authentication Codes (PAC)** utilisent des signatures cryptographiques intĂ©grĂ©es dans des bits inutilisĂ©s des pointeurs pour vĂ©rifier leur intĂ©gritĂ© avant utilisation. Lorsqu'un pointeur (comme une adresse de retour ou un pointeur de fonction) est créé, le CPU le signe avec une clĂ© secrĂšte ; avant la dĂ©rĂ©fĂ©rence, le CPU vĂ©rifie la signature. Si le pointeur a Ă©tĂ© altĂ©rĂ©, la vĂ©rification Ă©choue et l'exĂ©cution s'arrĂȘte. Cela empĂȘche les attaquants de forger ou rĂ©utiliser des pointeurs corrompus dans des exploits de corruption mĂ©moire, rendant des techniques comme ROP ou JOP beaucoup plus difficiles Ă mettre en Ćuvre de façon fiable.
-- **Privilege Access never (PAN)** est une fonctionnalitĂ© matĂ©rielle qui empĂȘche le kernel (mode privilĂ©giĂ©) d'accĂ©der directement Ă la mĂ©moire user-space Ă moins d'activer explicitement l'accĂšs. Cela stoppe les attaquants ayant obtenu une exĂ©cution de code kernel d'accĂ©der facilement Ă la mĂ©moire utilisateur pour escalader des privilĂšges ou voler des donnĂ©es sensibles. En faisant respecter une sĂ©paration stricte, PAN rĂ©duit l'impact des exploits kernel et bloque de nombreuses techniques d'escalade de privilĂšges courantes.
-- **Page Protection Layer (PPL)** est un mĂ©canisme de sĂ©curitĂ© iOS qui protĂšge des rĂ©gions critiques de la mĂ©moire gĂ©rĂ©es par le kernel, en particulier celles liĂ©es au code signing et aux entitlements. Il applique des protections strictes en Ă©criture via la MMU (Memory Management Unit) et des contrĂŽles supplĂ©mentaires, garantissant que mĂȘme du code kernel privilĂ©giĂ© ne peut modifier arbitrairement des pages sensibles. Cela empĂȘche les attaquants ayant obtenu une exĂ©cution au niveau kernel de manipuler des structures critiques pour la sĂ©curitĂ©, rendant la persistance et les contournements de code signing significativement plus difficiles.
-
+- **Data Execution Prevention (DEP)** marque des rĂ©gions mĂ©moire comme non-exĂ©cutables sauf si elles contiennent explicitement du code. Cela empĂȘche les attaquants dâinjecter du shellcode dans des rĂ©gions de donnĂ©es (comme la stack ou le heap) et de lâexĂ©cuter, les forçant Ă utiliser des techniques plus complexes comme ROP (Return-Oriented Programming).
+- **ASLR (Address Space Layout Randomization)** randomise les adresses mĂ©moire du code, des bibliothĂšques, de la stack et du heap Ă chaque exĂ©cution du systĂšme. Cela complique Ă©normĂ©ment la prĂ©diction de lâemplacement dâinstructions ou de gadgets utiles, brisant de nombreuses chaĂźnes dâexploit qui dĂ©pendent dâun layout mĂ©moire fixe.
+- **KASLR (Kernel ASLR)** applique le mĂȘme concept de randomisation au kernel iOS. En dĂ©plaçant lâadresse de base du kernel Ă chaque boot, il empĂȘche les attaquants de localiser de maniĂšre fiable les fonctions ou structures du kernel, augmentant la difficultĂ© des exploits au niveau kernel visant Ă prendre le contrĂŽle total du systĂšme.
+- **Kernel Patch Protection (KPP)**, aussi connu sous le nom **AMCC (Apple Mobile File Integrity)** sur iOS, surveille en continu les pages de code du kernel pour sâassurer quâelles nâont pas Ă©tĂ© modifiĂ©es. Si une altĂ©ration est dĂ©tectĂ©e â par exemple un exploit tentant de patcher des fonctions du kernel ou dâinsĂ©rer du code malveillant â lâappareil va paniquer et redĂ©marrer immĂ©diatement. Cette protection rend les exploits persistants du kernel beaucoup plus difficiles, car les attaquants ne peuvent pas hooker ou patcher les instructions du kernel sans provoquer un crash systĂšme.
+- **Kernel Text Readonly Region (KTRR)** est une fonctionnalitĂ© matĂ©rielle introduite sur les appareils iOS. Elle utilise le contrĂŽleur mĂ©moire du CPU pour marquer la section code (text) du kernel comme dĂ©finitivement en lecture seule aprĂšs le boot. Une fois verrouillĂ©e, mĂȘme le kernel luiâmĂȘme ne peut pas modifier cette rĂ©gion mĂ©moire. Cela empĂȘche les attaquants â et mĂȘme du code privilĂ©giĂ© â de patcher les instructions du kernel Ă lâexĂ©cution, fermant une grande classe dâexploits qui dĂ©pendaient de la modification directe du code kernel.
+- **Pointer Authentication Codes (PAC)** utilisent des signatures cryptographiques intĂ©grĂ©es dans des bits inutilisĂ©s des pointeurs pour vĂ©rifier leur intĂ©gritĂ© avant utilisation. Lorsquâun pointeur (comme une adresse de retour ou un function pointer) est créé, le CPU le signe avec une clĂ© secrĂšte ; avant la dĂ©rĂ©fĂ©rence, le CPU vĂ©rifie la signature. Si le pointeur a Ă©tĂ© altĂ©rĂ©, la vĂ©rification Ă©choue et lâexĂ©cution sâarrĂȘte. Cela empĂȘche les attaquants de forger ou de rĂ©utiliser des pointeurs corrompus dans des exploits de corruption mĂ©moire, rendant des techniques comme ROP ou JOP beaucoup plus difficiles Ă rĂ©aliser de maniĂšre fiable.
+- **Privilege Access never (PAN)** est une fonctionnalitĂ© matĂ©rielle qui empĂȘche le kernel (mode privilĂ©giĂ©) dâaccĂ©der directement Ă la mĂ©moire user-space Ă moins dâactiver explicitement cet accĂšs. Cela stoppe les attaquants qui ont obtenu lâexĂ©cution de code kernel de lire ou dâĂ©crire facilement la mĂ©moire utilisateur pour escalader des privilĂšges ou voler des donnĂ©es sensibles. En imposant une sĂ©paration stricte, PAN rĂ©duit lâimpact des exploits kernel et bloque de nombreuses techniques courantes dâescalade de privilĂšges.
+- **Page Protection Layer (PPL)** est un mĂ©canisme de sĂ©curitĂ© iOS qui protĂšge des rĂ©gions mĂ©moire critiques gĂ©rĂ©es par le kernel, en particulier celles liĂ©es au code signing et aux entitlements. Il impose des protections dâĂ©criture strictes en utilisant la MMU (Memory Management Unit) et des vĂ©rifications additionnelles, garantissant que mĂȘme du code kernel privilĂ©giĂ© ne peut pas modifier arbitrairement des pages sensibles. Cela empĂȘche les attaquants ayant obtenu lâexĂ©cution au niveau kernel de manipuler des structures critiques de sĂ©curitĂ©, rendant la persistance et les contournements de code signing significativement plus difficiles.
## Physical use-after-free
-Ceci est un rĂ©sumĂ© du post disponible sur [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html). De plus, des informations complĂ©mentaires sur des exploits utilisant cette technique peuvent ĂȘtre trouvĂ©es sur [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd)
+Ceci est un rĂ©sumĂ© du post disponible sur [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) ; plus dâinformations sur des exploits utilisant cette technique se trouvent Ă©galement sur [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd)
### Memory management in XNU
-L'**espace d'adressage mémoire virtuelle** pour les processus utilisateur sur iOS s'étend de **0x0 à 0x8000000000**. Cependant, ces adresses ne correspondent pas directement à la mémoire physique. à la place, le **noyau** utilise des **tables de pages** pour traduire les adresses virtuelles en adresses **physiques** réelles.
+The **virtual memory address space** for user processes on iOS spans from **0x0 to 0x8000000000**. However, these addresses donât directly map to physical memory. Instead, the **kernel** uses **page tables** to translate virtual addresses into actual **physical addresses**.
-#### Niveaux des tables de pages dans iOS
+#### Levels of Page Tables in iOS
-Les tables de pages sont organisées hiérarchiquement en trois niveaux :
+Page tables are organized hierarchically in three levels:
-1. **L1 Page Table (Level 1)** :
-* Chaque entrée ici représente une large plage de mémoire virtuelle.
-* Elle couvre **0x1000000000 bytes** (ou **256 GB**) de mémoire virtuelle.
-2. **L2 Page Table (Level 2)** :
-* Une entrée ici représente une région plus petite de mémoire virtuelle, spécifiquement **0x2000000 bytes** (32 MB).
-* Une entrĂ©e L1 peut pointer vers une table L2 si elle ne peut pas mapper toute la rĂ©gion elle-mĂȘme.
-3. **L3 Page Table (Level 3)** :
-* C'est le niveau le plus fin, oĂč chaque entrĂ©e mappe une seule page mĂ©moire de **4 KB**.
-* Une entrée L2 peut pointer vers une table L3 si un contrÎle plus granulaire est nécessaire.
+1. **L1 Page Table (Level 1)**:
+* Each entry here represents a large range of virtual memory.
+* It covers **0x1000000000 bytes** (or **256 GB**) of virtual memory.
+2. **L2 Page Table (Level 2)**:
+* An entry here represents a smaller region of virtual memory, specifically **0x2000000 bytes** (32 MB).
+* An L1 entry may point to an L2 table if it can't map the entire region itself.
+3. **L3 Page Table (Level 3)**:
+* This is the finest level, where each entry maps a single **4 KB** memory page.
+* An L2 entry may point to an L3 table if more granular control is needed.
-#### Mappage de la mémoire virtuelle vers la mémoire physique
+#### Mapping Virtual to Physical Memory
-* **Direct Mapping (Block Mapping)** :
-* Certaines entrées d'une table de pages mappent directement une plage d'adresses virtuelles vers une plage contiguë d'adresses physiques (comme un raccourci).
-* **Pointer to Child Page Table** :
-* Si un contrÎle plus fin est nécessaire, une entrée à un niveau (par ex. L1) peut pointer vers une **table de pages enfant** au niveau suivant (par ex. L2).
+* **Direct Mapping (Block Mapping)**:
+* Some entries in a page table directly **map a range of virtual addresses** to a contiguous range of physical addresses (like a shortcut).
+* **Pointer to Child Page Table**:
+* If finer control is needed, an entry in one level (e.g., L1) can point to a **child page table** at the next level (e.g., L2).
-#### Exemple : Mappage d'une adresse virtuelle
+#### Example: Mapping a Virtual Address
-Supposons que vous essayez d'accéder à l'adresse virtuelle **0x1000000000** :
+Letâs say you try to access the virtual address **0x1000000000**:
-1. **L1 Table** :
-* Le noyau vérifie l'entrée de la table L1 correspondant à cette adresse virtuelle. Si elle contient un **pointeur vers une table L2**, il se rend dans cette table L2.
-2. **L2 Table** :
-* Le noyau vérifie la table L2 pour un mappage plus détaillé. Si cette entrée pointe vers une **table L3**, il poursuit dans cette table.
-3. **L3 Table** :
-* Le noyau consulte l'entrée finale L3, qui pointe vers l'**adresse physique** de la page mémoire réelle.
+1. **L1 Table**:
+* The kernel checks the L1 page table entry corresponding to this virtual address. If it has a **pointer to an L2 page table**, it goes to that L2 table.
+2. **L2 Table**:
+* The kernel checks the L2 page table for a more detailed mapping. If this entry points to an **L3 page table**, it proceeds there.
+3. **L3 Table**:
+* The kernel looks up the final L3 entry, which points to the **physical address** of the actual memory page.
-#### Exemple de mappage d'adresses
+#### Example of Address Mapping
-Si vous écrivez l'adresse physique **0x800004000** dans le premier index de la table L2, alors :
+If you write the physical address **0x800004000** into the first index of the L2 table, then:
-* Les adresses virtuelles de **0x1000000000** Ă **0x1002000000** se mappent vers les adresses physiques de **0x800004000** Ă **0x802004000**.
-* C'est un **block mapping** au niveau L2.
+* Virtual addresses from **0x1000000000** to **0x1002000000** map to physical addresses from **0x800004000** to **0x802004000**.
+* This is a **block mapping** at the L2 level.
-Alternativement, si l'entrée L2 pointe vers une table L3 :
+Alternatively, if the L2 entry points to an L3 table:
-* Chaque page de 4 KB dans la plage virtuelle **0x1000000000 -> 0x1002000000** serait mappée par des entrées individuelles dans la table L3.
+* Each 4 KB page in the virtual address range **0x1000000000 -> 0x1002000000** would be mapped by individual entries in the L3 table.
### Physical use-after-free
-Un **physical use-after-free** (UAF) se produit lorsque :
+A **physical use-after-free** (UAF) occurs when:
-1. Un processus **alloue** de la mémoire en lecture/écriture.
-2. Les **tables de pages** sont mises à jour pour mapper cette mémoire à une adresse physique spécifique que le processus peut accéder.
-3. Le processus **désalloue** (libÚre) la mémoire.
-4. Cependant, Ă cause d'un **bug**, le noyau **oublie de supprimer le mapping** des tables de pages, mĂȘme s'il marque la mĂ©moire physique correspondante comme libre.
-5. Le noyau peut alors **réallouer cette mémoire physique "libérée"** à d'autres fins, par exemple pour des **données du kernel**.
-6. Comme le mapping n'a pas été supprimé, le processus peut toujours **lire et écrire** dans cette mémoire physique.
+1. A process **allocates** some memory as **readable and writable**.
+2. The **page tables** are updated to map this memory to a specific physical address that the process can access.
+3. The process **deallocates** (frees) the memory.
+4. However, due to a **bug**, the kernel **forgets to remove the mapping** from the page tables, even though it marks the corresponding physical memory as free.
+5. The kernel can then **reallocate this "freed" physical memory** for other purposes, like **kernel data**.
+6. Since the mapping wasnât removed, the process can still **read and write** to this physical memory.
-Cela signifie que le processus peut accéder à des **pages de la mémoire du kernel**, qui peuvent contenir des données ou structures sensibles, permettant potentiellement à un attaquant de **manipuler la mémoire du kernel**.
+This means the process can access **pages of kernel memory**, which could contain sensitive data or structures, potentially allowing an attacker to **manipulate kernel memory**.
### IOSurface Heap Spray
-Puisque l'attaquant ne peut pas contrÎler quelles pages kernel spécifiques seront allouées à la mémoire libérée, il utilise une technique appelée **heap spray** :
+Since the attacker canât control which specific kernel pages will be allocated to freed memory, they use a technique called **heap spray**:
-1. L'attaquant **crée un grand nombre d'objets IOSurface** dans la mémoire kernel.
-2. Chaque objet IOSurface contient une **valeur magique** dans l'un de ses champs, ce qui facilite son identification.
-3. Il **scanne les pages libérées** pour voir si l'un de ces objets IOSurface a atterri sur une page libérée.
-4. Lorsqu'il trouve un objet IOSurface sur une page libérée, il peut l'utiliser pour **lire et écrire la mémoire du kernel**.
+1. The attacker **creates a large number of IOSurface objects** in kernel memory.
+2. Each IOSurface object contains a **magic value** in one of its fields, making it easy to identify.
+3. They **scan the freed pages** to see if any of these IOSurface objects landed on a freed page.
+4. When they find an IOSurface object on a freed page, they can use it to **read and write kernel memory**.
-Plus d'infos Ă ce sujet sur [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups)
+More info about this in [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups)
> [!TIP]
-> Sachez que les appareils iOS 16+ (A12+) apportent des mitigations matérielles (comme PPL ou SPTM) qui rendent les techniques de physical UAF bien moins viables.
-> PPL applique des protections MMU strictes sur les pages liĂ©es au code signing, aux entitlements et aux donnĂ©es sensibles du kernel, donc mĂȘme si une page est rĂ©utilisĂ©e, les Ă©critures depuis l'userland ou du code kernel compromis vers des pages protĂ©gĂ©es par PPL sont bloquĂ©es.
-> Secure Page Table Monitor (SPTM) Ă©tend PPL en renforçant les mises Ă jour des tables de pages elles-mĂȘmes. Il garantit que mĂȘme le code kernel privilĂ©giĂ© ne peut pas remapper silencieusement des pages libĂ©rĂ©es ou altĂ©rer des mappings sans passer par des contrĂŽles sĂ©curisĂ©s.
-> KTRR (Kernel Text Read-Only Region), qui verrouille la section code du kernel en lecture seule aprĂšs le boot. Cela empĂȘche toute modification Ă l'exĂ©cution du code du kernel, fermant un vecteur d'attaque majeur sur lequel les exploits de physical UAF s'appuyaient souvent.
-> De plus, les allocations `IOSurface` sont moins prévisibles et plus difficiles à mapper dans des régions accessibles par l'utilisateur, ce qui rend la technique de scan de "valeur magique" beaucoup moins fiable. Et `IOSurface` est désormais protégée par des entitlements et des restrictions de sandbox.
+> Be aware that iOS 16+ (A12+) devices bring hardware mitigations (like PPL or SPTM) that make physical UAF techniques far less viable.
+> PPL enforces strict MMU protections on pages related to code signing, entitlements, and sensitive kernel data, so, even if a page gets reused, writes from userland or compromised kernel code to PPL-protected pages are blocked.
+> Secure Page Table Monitor (SPTM) extends PPL by hardening page table updates themselves. It ensures that even privileged kernel code cannot silently remap freed pages or tamper with mappings without going through secure checks.
+> KTRR (Kernel Text Read-Only Region), which locks down the kernelâs code section as read-only after boot. This prevents any runtime modifications to kernel code, closing off a major attack vector that physical UAF exploits often rely on.
+> Moreover, `IOSurface` allocations are less predictable and harder to map into user-accessible regions, which makes the âmagic value scanningâ trick much less reliable. And `IOSurface` is now guarded by entitlements and sandbox restrictions.
-### Processus de Heap Spray étape par étape
+### Step-by-Step Heap Spray Process
-1. **Spray IOSurface Objects** : L'attaquant crée de nombreux objets IOSurface avec un identifiant spécial ("valeur magique").
-2. **Scan Freed Pages** : Il vérifie si l'un des objets a été alloué sur une page libérée.
-3. **Read/Write Kernel Memory** : En manipulant des champs de l'objet IOSurface, il obtient la capacité d'effectuer des **lectures et écritures arbitraires** dans la mémoire du kernel. Cela lui permet de :
-* Utiliser un champ pour **lire n'importe quelle valeur 32-bit** dans la mémoire du kernel.
-* Utiliser un autre champ pour **écrire des valeurs 64-bit**, obtenant un primitive stable de **kernel read/write**.
+1. **Spray IOSurface Objects**: The attacker creates many IOSurface objects with a special identifier ("magic value").
+2. **Scan Freed Pages**: They check if any of the objects have been allocated on a freed page.
+3. **Read/Write Kernel Memory**: By manipulating fields in the IOSurface object, they gain the ability to perform **arbitrary reads and writes** in kernel memory. This lets them:
+* Use one field to **read any 32-bit value** in kernel memory.
+* Use another field to **write 64-bit values**, achieving a stable **kernel read/write primitive**.
Generate IOSurface objects with the magic value IOSURFACE\_MAGIC to later search for:
```c
@@ -128,7 +127,7 @@ io_connect_t id = result.surface_id;
}
}
```
-Rechercher des objets **`IOSurface`** dans une page physique libérée:
+Rechercher des objets **`IOSurface`** dans une page physique libérée :
```c
int iosurface_krw(io_connect_t client, uint64_t *puafPages, int nPages, uint64_t *self_task, uint64_t *puafPage) {
io_connect_t *surfaceIDs = malloc(sizeof(io_connect_t) * 0x4000);
@@ -162,9 +161,9 @@ free(surfaceIDs);
return 0;
}
```
-### Obtention d'un accÚs lecture/écriture au kernel avec IOSurface
+### Obtenir des opérations de lecture/écriture kernel avec IOSurface
-AprÚs avoir pris le contrÎle d'un objet IOSurface dans la mémoire kernel (mappé sur une page physique libérée accessible depuis userspace), on peut l'utiliser pour des **opérations arbitraires de lecture et d'écriture kernel**.
+AprÚs avoir pris le contrÎle d'un objet IOSurface dans la mémoire kernel (mappé sur une page physique libérée accessible depuis userspace), on peut l'utiliser pour des opérations de **lecture et écriture kernel arbitraires**.
**Champs clés dans IOSurface**
@@ -175,7 +174,7 @@ L'objet IOSurface possĂšde deux champs cruciaux :
En écrasant ces pointeurs, on les redirige vers des adresses arbitraires en mémoire kernel, activant des capacités de lecture/écriture.
-#### Lecture 32-bit du kernel
+#### Lecture kernel 32-bit
Pour effectuer une lecture :
@@ -198,12 +197,12 @@ iosurface_set_use_count_pointer(info.object, orig);
return value;
}
```
-#### Ăcriture 64 bits dans le noyau
+#### Ăcriture 64 bits dans le kernel
Pour effectuer une écriture :
-1. Ăcrasez le **indexed timestamp pointer** pour qu'il pointe vers l'adresse cible.
-2. Utilisez la méthode `set_indexed_timestamp` pour écrire une valeur 64 bits.
+1. Ăcraser le **indexed timestamp pointer** pour qu'il pointe vers l'adresse cible.
+2. Utiliser la méthode `set_indexed_timestamp` pour écrire une valeur 64 bits.
```c
void set_indexed_timestamp(io_connect_t client, uint32_t surfaceID, uint64_t value) {
uint64_t args[3] = {surfaceID, 0, value};
@@ -222,8 +221,8 @@ iosurface_set_indexed_timestamp_pointer(info.object, orig);
1. **Trigger Physical Use-After-Free**: Des pages libérées sont disponibles pour réutilisation.
2. **Spray IOSurface Objects**: Allouer de nombreux objets IOSurface avec une "magic value" unique dans kernel memory.
3. **Identify Accessible IOSurface**: Localiser un IOSurface sur une page libérée que vous contrÎlez.
-4. **Abuse Use-After-Free**: Modifier des pointeurs dans l'objet IOSurface pour permettre des **kernel read/write** arbitraires via les méthodes IOSurface.
+4. **Abuse Use-After-Free**: Modifier les pointeurs dans l'objet IOSurface pour permettre des **kernel read/write** arbitraires via les méthodes IOSurface.
-Avec ces primitives, l'exploit fournit des **32-bit reads** contrÎlés et des **64-bit writes** vers kernel memory. Les étapes de jailbreak supplémentaires pourraient impliquer des primitives de read/write plus stables, qui peuvent nécessiter de contourner des protections additionnelles (par ex., PPL sur les appareils arm64e plus récents).
+Avec ces primitives, l'exploit fournit des **32-bit reads** contrÎlés et des **64-bit writes** vers le kernel memory. D'autres étapes de jailbreak pourraient impliquer des primitives de read/write plus stables, qui peuvent nécessiter de contourner des protections supplémentaires (par ex., PPL sur les appareils arm64e plus récents).
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/blockchain/blockchain-and-crypto-currencies/README.md b/src/blockchain/blockchain-and-crypto-currencies/README.md
index 2856fab35..5d1e4569c 100644
--- a/src/blockchain/blockchain-and-crypto-currencies/README.md
+++ b/src/blockchain/blockchain-and-crypto-currencies/README.md
@@ -1,176 +1,178 @@
+# Blockchain et Crypto-monnaies
+
{{#include ../../banners/hacktricks-training.md}}
## Concepts de base
-- **Smart Contracts** sont définis comme des programmes qui s'exécutent sur une blockchain lorsque certaines conditions sont remplies, automatisant l'exécution des accords sans intermédiaires.
-- **Decentralized Applications (dApps)** s'appuient sur des smart contracts, présentant une interface conviviale et un back-end transparent et auditable.
-- **Tokens & Coins** diffĂ©rencient oĂč les coins servent de monnaie numĂ©rique, tandis que les tokens reprĂ©sentent une valeur ou une propriĂ©tĂ© dans des contextes spĂ©cifiques.
+- **Smart Contracts** sont définis comme des programmes qui s'exécutent sur une blockchain lorsque certaines conditions sont remplies, automatisant l'exécution d'accords sans intermédiaires.
+- **Decentralized Applications (dApps)** reposent sur les smart contracts, avec une interface front-end conviviale et un back-end transparent et auditable.
+- **Tokens & Coins** différencient les rÎles : les coins servent de monnaie numérique, tandis que les tokens représentent de la valeur ou une propriété dans des contextes spécifiques.
- **Utility Tokens** donnent accÚs à des services, et **Security Tokens** signifient la propriété d'actifs.
-- **DeFi** signifie Finance Décentralisée, offrant des services financiers sans autorités centrales.
-- **DEX** et **DAOs** font référence aux plateformes d'échange décentralisées et aux organisations autonomes décentralisées, respectivement.
+- **DeFi** désigne Decentralized Finance, offrant des services financiers sans autorités centrales.
+- **DEX** et **DAOs** se réfÚrent respectivement aux Decentralized Exchange Platforms et aux Decentralized Autonomous Organizations.
## Mécanismes de consensus
-Les mécanismes de consensus garantissent des validations de transactions sécurisées et convenues sur la blockchain :
+Les mécanismes de consensus garantissent la validation sécurisée et convenue des transactions sur la blockchain :
- **Proof of Work (PoW)** repose sur la puissance de calcul pour la vérification des transactions.
-- **Proof of Stake (PoS)** exige que les validateurs détiennent un certain montant de tokens, réduisant la consommation d'énergie par rapport au PoW.
+- **Proof of Stake (PoS)** exige que les validateurs détiennent une certain nombre de tokens, réduisant la consommation d'énergie par rapport au PoW.
-## Essentiels de Bitcoin
+## Notions essentielles sur Bitcoin
### Transactions
-Les transactions Bitcoin impliquent le transfert de fonds entre adresses. Les transactions sont validées par des signatures numériques, garantissant que seul le propriétaire de la clé privée peut initier des transferts.
+Les transactions Bitcoin impliquent le transfert de fonds entre adresses. Les transactions sont validées via des signatures numériques, garantissant que seul le détenteur de la clé privée peut initier des transferts.
#### Composants clés :
-- **Multisignature Transactions** nécessitent plusieurs signatures pour autoriser une transaction.
-- Les transactions se composent d'**inputs** (source de fonds), **outputs** (destination), **fees** (payées aux mineurs) et **scripts** (rÚgles de transaction).
+- **Multisignature Transactions** requiĂšrent plusieurs signatures pour autoriser une transaction.
+- Les transactions se composent d'**inputs** (origine des fonds), d'**outputs** (destination), de **fees** (frais payés aux mineurs) et de **scripts** (rÚgles de la transaction).
### Lightning Network
-Vise à améliorer la scalabilité de Bitcoin en permettant plusieurs transactions au sein d'un canal, ne diffusant l'état final que sur la blockchain.
+Vise à améliorer la scalabilité de Bitcoin en permettant plusieurs transactions au sein d'un canal, en ne diffusant sur la blockchain que l'état final.
-## Préoccupations en matiÚre de confidentialité de Bitcoin
+## ProblÚmes de confidentialité de Bitcoin
-Les attaques sur la vie privée, telles que **Common Input Ownership** et **UTXO Change Address Detection**, exploitent les modÚles de transaction. Des stratégies comme **Mixers** et **CoinJoin** améliorent l'anonymat en obscurcissant les liens de transaction entre les utilisateurs.
+Les attaques sur la confidentialité, telles que **Common Input Ownership** et la **détection d'adresses de change UTXO**, exploitent les motifs transactionnels. Des stratégies comme les **Mixers** et **CoinJoin** améliorent l'anonymat en obscurcissant les liens de transaction entre utilisateurs.
-## Acquisition de Bitcoins de maniĂšre anonyme
+## Acquérir des Bitcoins de façon anonyme
-Les méthodes incluent les échanges en espÚces, le minage et l'utilisation de mixers. **CoinJoin** mélange plusieurs transactions pour compliquer la traçabilité, tandis que **PayJoin** dissimule les CoinJoins en tant que transactions réguliÚres pour une confidentialité accrue.
+Les méthodes incluent les transactions en espÚces, le mining et l'utilisation de mixers. **CoinJoin** mélange plusieurs transactions pour compliquer la traçabilité, tandis que **PayJoin** camoufle les CoinJoin en transactions réguliÚres pour une confidentialité accrue.
-# Attaques sur la vie privée de Bitcoin
+# Attaques de confidentialité Bitcoin
-# Résumé des attaques sur la vie privée de Bitcoin
+# Résumé des attaques contre la confidentialité Bitcoin
-Dans le monde de Bitcoin, la confidentialité des transactions et l'anonymat des utilisateurs sont souvent des sujets de préoccupation. Voici un aperçu simplifié de plusieurs méthodes courantes par lesquelles les attaquants peuvent compromettre la vie privée de Bitcoin.
+Dans l'univers de Bitcoin, la confidentialité des transactions et l'anonymat des utilisateurs sont souvent préoccupants. Voici un aperçu simplifié de plusieurs méthodes courantes par lesquelles des attaquants peuvent compromettre la confidentialité sur Bitcoin.
-## **Common Input Ownership Assumption**
+## **HypothĂšse d'appartenance commune des inputs**
-Il est gĂ©nĂ©ralement rare que des inputs de diffĂ©rents utilisateurs soient combinĂ©s dans une seule transaction en raison de la complexitĂ© impliquĂ©e. Ainsi, **deux adresses d'input dans la mĂȘme transaction sont souvent supposĂ©es appartenir au mĂȘme propriĂ©taire**.
+Il est gĂ©nĂ©ralement rare que des inputs provenant de diffĂ©rents utilisateurs soient combinĂ©s dans une seule transaction Ă cause de la complexitĂ© impliquĂ©e. Ainsi, **deux adresses en tant qu'inputs dans la mĂȘme transaction sont souvent supposĂ©es appartenir au mĂȘme propriĂ©taire**.
-## **UTXO Change Address Detection**
+## **Détection d'adresse de change UTXO**
-Un UTXO, ou **Unspent Transaction Output**, doit ĂȘtre entiĂšrement dĂ©pensĂ© dans une transaction. Si seule une partie est envoyĂ©e Ă une autre adresse, le reste va Ă une nouvelle adresse de changement. Les observateurs peuvent supposer que cette nouvelle adresse appartient Ă l'expĂ©diteur, compromettant la vie privĂ©e.
+Un UTXO, ou Unspent Transaction Output (sortie de transaction non dĂ©pensĂ©e), doit ĂȘtre dĂ©pensĂ© intĂ©gralement dans une transaction. Si seule une partie est envoyĂ©e Ă une autre adresse, le reste est renvoyĂ© Ă une nouvelle adresse de change. Les observateurs peuvent supposer que cette nouvelle adresse appartient Ă l'expĂ©diteur, compromettant la confidentialitĂ©.
### Exemple
-Pour atténuer cela, les services de mixage ou l'utilisation de plusieurs adresses peuvent aider à obscurcir la propriété.
+Pour atténuer cela, les services de mixing ou l'utilisation de plusieurs adresses peuvent aider à obscurcir la propriété.
-## **Exposition sur les réseaux sociaux et forums**
+## **Exposition via les réseaux sociaux & forums**
-Les utilisateurs partagent parfois leurs adresses Bitcoin en ligne, rendant **facile de lier l'adresse à son propriétaire**.
+Les utilisateurs partagent parfois leurs adresses Bitcoin en ligne, ce qui rend **facile de lier l'adresse à son propriétaire**.
-## **Analyse des graphes de transactions**
+## **Analyse du graphe des transactions**
-Les transactions peuvent ĂȘtre visualisĂ©es sous forme de graphes, rĂ©vĂ©lant des connexions potentielles entre les utilisateurs en fonction du flux de fonds.
+Les transactions peuvent ĂȘtre visualisĂ©es sous forme de graphes, rĂ©vĂ©lant des connexions potentielles entre utilisateurs basĂ©es sur le flux de fonds.
-## **Heuristique d'input inutile (Heuristique de changement optimal)**
+## **Heuristique de l'input inutile (Optimal Change Heuristic)**
-Cette heuristique est basée sur l'analyse des transactions avec plusieurs inputs et outputs pour deviner quel output est le changement retournant à l'expéditeur.
+Cette heuristique se base sur l'analyse des transactions avec plusieurs inputs et outputs pour deviner quel output est la monnaie de retour (change) revenant à l'expéditeur.
### Exemple
```bash
2 btc --> 4 btc
3 btc 1 btc
```
-Si l'ajout de plus d'entrées rend la sortie de changement plus grande que n'importe quelle entrée unique, cela peut confondre l'heuristique.
+Si l'ajout d'inputs rend la sortie de change plus grande que n'importe quel input individuel, cela peut tromper l'heuristique.
-## **Réutilisation d'Adresse Forcée**
+## **Forced Address Reuse**
-Les attaquants peuvent envoyer de petites sommes à des adresses précédemment utilisées, espérant que le destinataire les combine avec d'autres entrées dans de futures transactions, reliant ainsi les adresses ensemble.
+Les attaquants peuvent envoyer de petites sommes à des adresses déjà utilisées, en espérant que le destinataire les combine avec d'autres inputs dans des transactions futures, liant ainsi les adresses entre elles.
-### Comportement Correct du Portefeuille
+### Correct Wallet Behavior
-Les portefeuilles devraient éviter d'utiliser des piÚces reçues sur des adresses déjà utilisées et vides pour prévenir cette fuite de confidentialité.
+Les wallets doivent éviter d'utiliser les coins reçus sur des adresses déjà utilisées et vides pour prévenir cette privacy leak.
-## **Autres Techniques d'Analyse de Blockchain**
+## **Other Blockchain Analysis Techniques**
-- **Montants de Paiement Exactes :** Les transactions sans changement sont probablement entre deux adresses appartenant au mĂȘme utilisateur.
-- **Nombres Ronds :** Un nombre rond dans une transaction suggÚre qu'il s'agit d'un paiement, avec la sortie non ronde étant probablement le changement.
-- **Empreinte de Portefeuille :** Différents portefeuilles ont des modÚles de création de transactions uniques, permettant aux analystes d'identifier le logiciel utilisé et potentiellement l'adresse de changement.
-- **Corrélations de Montant & Timing :** La divulgation des heures ou des montants de transaction peut rendre les transactions traçables.
+- **Exact Payment Amounts:** Les transactions sans change sont probablement entre deux adresses appartenant au mĂȘme utilisateur.
+- **Round Numbers:** Un nombre rond dans une transaction suggÚre qu'il s'agit d'un paiement, la sortie non ronde étant probablement la sortie de change.
+- **Wallet Fingerprinting:** Différents wallets ont des schémas uniques de création de transactions, permettant aux analystes d'identifier le logiciel utilisé et potentiellement l'adresse de change.
+- **Amount & Timing Correlations:** La divulgation des heures ou des montants des transactions peut rendre les transactions traçables.
-## **Analyse de Trafic**
+## **Traffic Analysis**
-En surveillant le trafic rĂ©seau, les attaquants peuvent potentiellement lier des transactions ou des blocs Ă des adresses IP, compromettant ainsi la confidentialitĂ© des utilisateurs. Cela est particuliĂšrement vrai si une entitĂ© exploite de nombreux nĆuds Bitcoin, amĂ©liorant sa capacitĂ© Ă surveiller les transactions.
+En surveillant le trafic rĂ©seau, des attaquants peuvent potentiellement lier des transactions ou des blocs Ă des adresses IP, compromettant la confidentialitĂ© des utilisateurs. Cela est particuliĂšrement vrai si une entitĂ© exploite de nombreux nĆuds Bitcoin, renforçant sa capacitĂ© Ă surveiller les transactions.
-## Plus
+## More
-Pour une liste complÚte des attaques sur la confidentialité et des défenses, visitez [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
+Pour une liste complÚte des attaques et des défenses en matiÚre de confidentialité, visitez [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
-# Transactions Bitcoin Anonymes
+# Anonymous Bitcoin Transactions
-## Façons d'Obtenir des Bitcoins de ManiÚre Anonyme
+## Ways to Get Bitcoins Anonymously
-- **Transactions en EspÚces :** Acquérir des bitcoins par le biais d'espÚces.
-- **Alternatives en EspÚces :** Acheter des cartes-cadeaux et les échanger en ligne contre des bitcoins.
-- **Minage :** La méthode la plus privée pour gagner des bitcoins est le minage, surtout lorsqu'il est effectué seul, car les pools de minage peuvent connaßtre l'adresse IP du mineur. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
-- **Vol :** ThĂ©oriquement, voler des bitcoins pourrait ĂȘtre une autre mĂ©thode pour les acquĂ©rir anonymement, bien que cela soit illĂ©gal et non recommandĂ©.
+- **Cash Transactions**: Acquérir du bitcoin en espÚces.
+- **Cash Alternatives**: Acheter des cartes-cadeaux et les échanger en ligne contre du bitcoin.
+- **Mining**: La méthode la plus privée pour gagner des bitcoins est le mining, surtout en solo car les mining pools peuvent connaßtre l'adresse IP du mineur. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
+- **Theft**: ThĂ©oriquement, voler des bitcoins pourrait ĂȘtre une autre mĂ©thode pour les obtenir anonymement, bien que ce soit illĂ©gal et non recommandĂ©.
-## Services de Mixage
+## Mixing Services
-En utilisant un service de mixage, un utilisateur peut **envoyer des bitcoins** et recevoir **des bitcoins différents en retour**, ce qui rend difficile la traçabilité du propriétaire d'origine. Cependant, cela nécessite de faire confiance au service pour ne pas conserver de journaux et pour réellement retourner les bitcoins. Des options de mixage alternatives incluent les casinos Bitcoin.
+En utilisant un mixing service, un utilisateur peut **envoyer des bitcoins** et recevoir **d'autres bitcoins en retour**, ce qui rend la traçabilité du propriétaire initial difficile. Cependant, cela nécessite de faire confiance au service pour ne pas conserver de logs et pour renvoyer effectivement les bitcoins. D'autres options de mixing incluent les casinos Bitcoin.
## CoinJoin
-**CoinJoin** fusionne plusieurs transactions de diffĂ©rents utilisateurs en une seule, compliquant le processus pour quiconque essaie d'associer des entrĂ©es avec des sorties. MalgrĂ© son efficacitĂ©, les transactions avec des tailles d'entrĂ©e et de sortie uniques peuvent encore potentiellement ĂȘtre tracĂ©es.
+CoinJoin fusionne plusieurs transactions de diffĂ©rents utilisateurs en une seule, compliquant le travail de quiconque essaie d'associer inputs et outputs. MalgrĂ© son efficacitĂ©, des transactions ayant des tailles d'input et d'output uniques peuvent encore potentiellement ĂȘtre retracĂ©es.
-Des transactions d'exemple qui ont pu utiliser CoinJoin incluent `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` et `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
+Exemples de transactions qui ont peutâĂȘtre utilisĂ© CoinJoin incluent `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` et `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
-Pour plus d'informations, visitez [CoinJoin](https://coinjoin.io/en). Pour un service similaire sur Ethereum, consultez [Tornado Cash](https://tornado.cash), qui anonymise les transactions avec des fonds provenant de mineurs.
+Pour plus d'informations, visitez [CoinJoin](https://coinjoin.io/en). Pour un service similaire sur Ethereum, consultez [Tornado Cash](https://tornado.cash), qui anonymise les transactions avec des fonds provenant des mineurs.
## PayJoin
-Une variante de CoinJoin, **PayJoin** (ou P2EP), dissimule la transaction entre deux parties (par exemple, un client et un commerçant) comme une transaction rĂ©guliĂšre, sans les caractĂ©ristiques distinctives de sorties Ă©gales de CoinJoin. Cela rend extrĂȘmement difficile la dĂ©tection et pourrait invalider l'heuristique de propriĂ©tĂ© d'entrĂ©e commune utilisĂ©e par les entitĂ©s de surveillance des transactions.
+Un variant de CoinJoin, **PayJoin** (ou P2EP), dĂ©guisent la transaction entre deux parties (par ex. un client et un commerçant) en une transaction ordinaire, sans les sorties Ă©gales distinctives caractĂ©ristiques de CoinJoin. Cela la rend extrĂȘmement difficile Ă dĂ©tecter et peut invalider la common-input-ownership heuristic utilisĂ©e par les entitĂ©s de surveillance des transactions.
```plaintext
2 btc --> 3 btc
5 btc 4 btc
```
-Les transactions comme celles-ci pourraient ĂȘtre des PayJoin, amĂ©liorant la confidentialitĂ© tout en restant indiscernables des transactions bitcoin standard.
+Des transactions comme celles ciâdessus pourraient ĂȘtre des PayJoin, amĂ©liorant la confidentialitĂ© tout en restant indiscernables des transactions bitcoin standard.
-**L'utilisation de PayJoin pourrait perturber considĂ©rablement les mĂ©thodes de surveillance traditionnelles**, en faisant un dĂ©veloppement prometteur dans la quĂȘte de la confidentialitĂ© transactionnelle.
+**L'utilisation de PayJoin pourrait perturber significativement les méthodes traditionnelles de surveillance**, en faisant un développement prometteur dans la recherche de la confidentialité des transactions.
# Meilleures pratiques pour la confidentialité dans les cryptomonnaies
-## **Techniques de synchronisation des portefeuilles**
+## **Wallet Synchronization Techniques**
-Pour maintenir la confidentialité et la sécurité, la synchronisation des portefeuilles avec la blockchain est cruciale. Deux méthodes se distinguent :
+Pour préserver la confidentialité et la sécurité, synchroniser les wallets avec la blockchain est crucial. Deux méthodes se distinguent :
-- **NĆud complet** : En tĂ©lĂ©chargeant l'intĂ©gralitĂ© de la blockchain, un nĆud complet garantit une confidentialitĂ© maximale. Toutes les transactions jamais effectuĂ©es sont stockĂ©es localement, rendant impossible pour les adversaires d'identifier quelles transactions ou adresses intĂ©ressent l'utilisateur.
-- **Filtrage de blocs cĂŽtĂ© client** : Cette mĂ©thode consiste Ă crĂ©er des filtres pour chaque bloc de la blockchain, permettant aux portefeuilles d'identifier les transactions pertinentes sans exposer d'intĂ©rĂȘts spĂ©cifiques aux observateurs du rĂ©seau. Les portefeuilles lĂ©gers tĂ©lĂ©chargent ces filtres, ne rĂ©cupĂ©rant des blocs complets que lorsqu'une correspondance avec les adresses de l'utilisateur est trouvĂ©e.
+- **Full node** : En téléchargeant l'intégralité de la blockchain, un full node garantit une confidentialité maximale. Toutes les transactions jamais effectuées sont stockées localement, rendant impossible pour des adversaires d'identifier quelles transactions ou adresses intéressent l'utilisateur.
+- **Client-side block filtering** : Cette mĂ©thode consiste Ă crĂ©er des filtres pour chaque bloc de la blockchain, permettant aux wallets d'identifier les transactions pertinentes sans exposer des intĂ©rĂȘts spĂ©cifiques aux observateurs du rĂ©seau. Les wallets lĂ©gers tĂ©lĂ©chargent ces filtres, ne rĂ©cupĂ©rant les blocs complets que lorsqu'il y a une correspondance avec les adresses de l'utilisateur.
-## **Utilisation de Tor pour l'anonymat**
+## **Utiliser Tor pour l'anonymat**
-Ătant donnĂ© que Bitcoin fonctionne sur un rĂ©seau pair-Ă -pair, il est recommandĂ© d'utiliser Tor pour masquer votre adresse IP, amĂ©liorant la confidentialitĂ© lors de l'interaction avec le rĂ©seau.
+Ătant donnĂ© que Bitcoin fonctionne sur un rĂ©seau peer-to-peer, il est recommandĂ© d'utiliser Tor pour masquer votre adresse IP, renforçant la confidentialitĂ© lors des interactions avec le rĂ©seau.
-## **Prévention de la réutilisation des adresses**
+## **Prévenir la réutilisation d'adresses**
-Pour protĂ©ger la confidentialitĂ©, il est vital d'utiliser une nouvelle adresse pour chaque transaction. La rĂ©utilisation des adresses peut compromettre la confidentialitĂ© en liant les transactions Ă la mĂȘme entitĂ©. Les portefeuilles modernes dĂ©couragent la rĂ©utilisation des adresses par leur conception.
+Pour protĂ©ger la confidentialitĂ©, il est essentiel d'utiliser une nouvelle adresse pour chaque transaction. La rĂ©utilisation d'adresses peut compromettre la confidentialitĂ© en reliant des transactions Ă la mĂȘme entitĂ©. Les wallets modernes dĂ©couragent la rĂ©utilisation d'adresses par leur conception.
## **Stratégies pour la confidentialité des transactions**
-- **Transactions multiples** : Diviser un paiement en plusieurs transactions peut obscurcir le montant de la transaction, contrecarrant les attaques sur la confidentialité.
-- **Ăvitement du changement** : Opter pour des transactions qui ne nĂ©cessitent pas de sorties de changement amĂ©liore la confidentialitĂ© en perturbant les mĂ©thodes de dĂ©tection du changement.
-- **Multiples sorties de changement** : Si l'Ă©vitement du changement n'est pas faisable, gĂ©nĂ©rer plusieurs sorties de changement peut tout de mĂȘme amĂ©liorer la confidentialitĂ©.
+- **Multiple transactions** : Fractionner un paiement en plusieurs transactions peut obscurcir le montant, contrecarrant les attaques visant la confidentialité.
+- **Change avoidance** : Choisir des transactions qui n'exigent pas d'outputs de change améliore la confidentialité en perturbant les méthodes de détection du change.
+- **Multiple change outputs** : Si Ă©viter le change n'est pas faisable, gĂ©nĂ©rer plusieurs outputs de change peut quand mĂȘme amĂ©liorer la confidentialitĂ©.
-# **Monero : Un phare d'anonymat**
+# **Monero : un phare de l'anonymat**
-Monero répond au besoin d'anonymat absolu dans les transactions numériques, établissant une norme élevée pour la confidentialité.
+Monero répond au besoin d'anonymat absolu dans les transactions numériques, établissant une norme élevée en matiÚre de confidentialité.
-# **Ethereum : Gaz et transactions**
+# **Ethereum : Gas et transactions**
-## **Comprendre le gaz**
+## **Comprendre le Gas**
-Le gaz mesure l'effort computationnel nécessaire pour exécuter des opérations sur Ethereum, tarifé en **gwei**. Par exemple, une transaction coûtant 2 310 000 gwei (ou 0,00231 ETH) implique une limite de gaz et un frais de base, avec un pourboire pour inciter les mineurs. Les utilisateurs peuvent définir un frais maximum pour s'assurer de ne pas trop payer, l'excédent étant remboursé.
+Le Gas mesure l'effort computationnel nécessaire pour exécuter des opérations sur Ethereum, tarifé en **gwei**. Par exemple, une transaction coûtant 2 310 000 gwei (ou 0,00231 ETH) implique une gas limit et une base fee, avec un tip pour inciter les mineurs. Les utilisateurs peuvent définir un max fee pour s'assurer de ne pas trop payer, l'excédent étant remboursé.
## **Exécution des transactions**
-Les transactions sur Ethereum impliquent un expĂ©diteur et un destinataire, qui peuvent ĂȘtre soit des adresses d'utilisateur, soit des adresses de contrat intelligent. Elles nĂ©cessitent un frais et doivent ĂȘtre minĂ©es. Les informations essentielles dans une transaction incluent le destinataire, la signature de l'expĂ©diteur, la valeur, des donnĂ©es optionnelles, la limite de gaz et les frais. Notamment, l'adresse de l'expĂ©diteur est dĂ©duite de la signature, Ă©liminant le besoin de celle-ci dans les donnĂ©es de la transaction.
+Les transactions sur Ethereum impliquent un Ă©metteur et un destinataire, qui peuvent ĂȘtre des adresses utilisateur ou des contrats intelligents. Elles requiĂšrent des frais et doivent ĂȘtre minĂ©es. Les informations essentielles d'une transaction incluent le destinataire, la signature de l'Ă©metteur, la valeur, des donnĂ©es optionnelles, la gas limit et les frais. Notamment, l'adresse de l'Ă©metteur est dĂ©duite de la signature, ce qui Ă©vite d'avoir Ă l'inclure dans les donnĂ©es de la transaction.
-Ces pratiques et mécanismes sont fondamentaux pour quiconque cherchant à s'engager avec les cryptomonnaies tout en priorisant la confidentialité et la sécurité.
+Ces pratiques et mécanismes sont fondamentaux pour quiconque souhaite interagir avec les cryptomonnaies tout en donnant la priorité à la confidentialité et à la sécurité.
-## Références
+## References
- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
@@ -179,4 +181,12 @@ Ces pratiques et mécanismes sont fondamentaux pour quiconque cherchant à s'eng
- [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
- [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse)
+## DeFi/AMM Exploitation
+
+Si vous recherchez l'exploitation pratique des DEXes et AMMs (Uniswap v4 hooks, rounding/precision abuse, flashâloan amplified thresholdâcrossing swaps), consultez :
+
+{{#ref}}
+defi-amm-hook-precision.md
+{{#endref}}
+
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md b/src/blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md
new file mode 100644
index 000000000..59e367b40
--- /dev/null
+++ b/src/blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md
@@ -0,0 +1,160 @@
+# Exploitation DeFi/AMM : Abus de précision/arrondi des hooks Uniswap v4
+
+{{#include ../../banners/hacktricks-training.md}}
+
+Cette page documente une classe de techniques d'exploitation DeFi/AMM visant les DEXes de type Uniswap v4 qui étendent les mathématiques de base avec des hooks personnalisés. Un incident récent sur Bunni V2 a exploité une faille d'arrondi/de précision dans une Liquidity Distribution Function (LDF) exécutée à chaque swap, permettant à l'attaquant d'accumuler des crédits positifs et de drainer la liquidité.
+
+IdĂ©e clĂ© : si un hook implĂ©mente une comptabilitĂ© supplĂ©mentaire dĂ©pendant de mathĂ©matiques en virgule fixe, d'arrondis de tick et de logique de seuils, un attaquant peut construire des swaps exactâinput qui franchissent des seuils spĂ©cifiques de sorte que les divergences d'arrondi s'accumulent en sa faveur. RĂ©pĂ©ter le schĂ©ma puis retirer le solde gonflĂ© rĂ©alise le profit, souvent financĂ© par un flash loan.
+
+## Contexte : hooks Uniswap v4 et flux de swap
+
+- Les hooks sont des contrats appelés par le PoolManager à des points précis du cycle de vie (par ex., beforeSwap/afterSwap, beforeAddLiquidity/afterAddLiquidity, beforeRemoveLiquidity/afterRemoveLiquidity).
+- Les pools sont initialisĂ©s avec un PoolKey incluant une adresse hooks. Si nonâzĂ©ro, le PoolManager effectue des callbacks pour chaque opĂ©ration pertinente.
+- Core math utilise des formats en virgule fixe tels que Q64.96 pour sqrtPriceX96 et l'arithmétique de tick avec 1.0001^tick. Toute mathématique personnalisée superposée doit soigneusement matcher les sémantiques d'arrondi pour éviter une dérive d'invariant.
+- Les swaps peuvent ĂȘtre exactInput ou exactOutput. En v3/v4, le prix se dĂ©place le long des ticks ; franchir une limite de tick peut activer/dĂ©sactiver la liquidity de range. Les hooks peuvent implĂ©menter une logique additionnelle sur les franchissements de seuil/tick.
+
+## Archétype de vulnérabilité : dérive de précision/arrondi au franchissement de seuil
+
+Un schéma typique vulnérable dans des hooks personnalisés :
+
+1. Le hook calcule des deltas de liquidity ou de balance par swap en utilisant des divisions entiĂšres, mulDiv, ou des conversions en virgule fixe (par ex., token â liquidity utilisant sqrtPrice et des tick ranges).
+2. Une logique de seuil (par ex., rebalancing, redistribution par paliers, ou activation par range) est déclenchée lorsque la taille du swap ou le mouvement de prix franchit une frontiÚre interne.
+3. L'arrondi est appliqué de maniÚre incohérente (par ex., troncature vers zéro, floor versus ceil) entre le calcul avant et le chemin de settlement. De petites divergences ne se compensent pas et créditent plutÎt l'appelant.
+4. Des swaps exactâinput, prĂ©cisĂ©ment calibrĂ©s pour chevaucher ces frontiĂšres, rĂ©coltent rĂ©pĂ©titivement le reste positif d'arrondi. L'attaquant retire ensuite le crĂ©dit accumulĂ©.
+
+Conditions préalables à l'attaque
+- Un pool utilisant un hook v4 personnalisé qui effectue des calculs supplémentaires à chaque swap (par ex., une LDF/rebalancer).
+- Au moins un chemin d'exĂ©cution oĂč l'arrondi avantage l'initiateur du swap lors des franchissements de seuil.
+- Capacité à répéter de nombreux swaps de maniÚre atomique (les flash loans sont idéaux pour fournir la trésorerie temporaire et amortir le gas).
+
+## Méthodologie pratique d'attaque
+
+1) Identifier les pools candidats avec hooks
+- ĂnumĂ©rer les pools v4 et vĂ©rifier PoolKey.hooks != address(0).
+- Inspecter le bytecode/ABI du hook pour les callbacks : beforeSwap/afterSwap et toute méthode de rebalancing personnalisée.
+- Chercher des mathématiques qui : divisent par liquidity, convertissent entre token et liquidity, ou agrÚgent BalanceDelta avec arrondi.
+
+2) Modéliser les mathématiques et seuils du hook
+- Recréer la formule de liquidity/redistribution du hook : les entrées incluent typiquement sqrtPriceX96, tickLower/Upper, currentTick, fee tier, et net liquidity.
+- Cartographier les fonctions de seuil/paliers : ticks, frontiÚres de buckets, ou breakpoints LDF. Déterminer de quel cÎté de chaque frontiÚre le delta est arrondi.
+- Identifier oĂč les conversions castent entre uint256/int256, utilisent SafeCast, ou reposent sur mulDiv avec floor implicite.
+
+3) Calibrer des swaps exactâinput pour franchir les frontiĂšres
+- Utiliser Foundry/Hardhat simulations pour calculer le Îin minimal nĂ©cessaire pour dĂ©placer le prix juste auâdelĂ d'une frontiĂšre et dĂ©clencher la branche du hook.
+- Vérifier qu'aprÚs le settlement du swap, l'appelant est crédité de plus que le coût, laissant un BalanceDelta ou un crédit positif dans la comptabilité du hook.
+- Répéter les swaps pour accumuler le crédit ; puis appeler le chemin de retrait/settlement du hook.
+
+Example Foundryâstyle test harness (pseudocode)
+```solidity
+function test_precision_rounding_abuse() public {
+// 1) Arrange: set up pool with hook
+PoolKey memory key = PoolKey({
+currency0: USDC,
+currency1: USDT,
+fee: 500, // 0.05%
+tickSpacing: 10,
+hooks: address(bunniHook)
+});
+pm.initialize(key, initialSqrtPriceX96);
+
+// 2) Determine a boundaryâcrossing exactInput
+uint256 exactIn = calibrateToCrossThreshold(key, targetTickBoundary);
+
+// 3) Loop swaps to accrue rounding credit
+for (uint i; i < N; ++i) {
+pm.swap(
+key,
+IPoolManager.SwapParams({
+zeroForOne: true,
+amountSpecified: int256(exactIn), // exactInput
+sqrtPriceLimitX96: 0 // allow tick crossing
+}),
+""
+);
+}
+
+// 4) Realize inflated credit via hookâexposed withdrawal
+bunniHook.withdrawCredits(msg.sender);
+}
+```
+Calibrer l'exactInput
+- Calculer ÎsqrtP pour un pas de tick : sqrtP_next = sqrtP_current Ă 1.0001^(Îtick).
+- Approximer Îin en utilisant les formules v3/v4 : Îx â L Ă (ÎsqrtP / (sqrtP_next Ă sqrtP_current)). Veiller Ă ce que le sens d'arrondi corresponde aux calculs fondamentaux.
+- Ajuster Îin de ±1 wei autour de la frontiĂšre pour trouver la branche oĂč le hook arrondit en votre faveur.
+
+4) Amplify with flash loans
+- Emprunter un montant important (p. ex., 3M USDT ou 2000 WETH) pour exécuter de nombreuses itérations atomiquement.
+- Exécuter la boucle de swap calibrée, puis withdraw et repay dans la callback du flash loan.
+
+Aave V3 flash loan skeleton
+```solidity
+function executeOperation(
+address[] calldata assets,
+uint256[] calldata amounts,
+uint256[] calldata premiums,
+address initiator,
+bytes calldata params
+) external returns (bool) {
+// run thresholdâcrossing swap loop here
+for (uint i; i < N; ++i) {
+_exactInBoundaryCrossingSwap();
+}
+// realize credits / withdraw inflated balances
+bunniHook.withdrawCredits(address(this));
+// repay
+for (uint j; j < assets.length; ++j) {
+IERC20(assets[j]).approve(address(POOL), amounts[j] + premiums[j]);
+}
+return true;
+}
+```
+5) Sortie et rĂ©plication interâchaĂźnes
+- Si des hooks sont dĂ©ployĂ©s sur plusieurs chaĂźnes, rĂ©pĂ©tez la mĂȘme calibration par chaĂźne.
+- On utilise un bridge pour renvoyer les fonds vers la chaĂźne cible et, optionnellement, on effectue des cycles via des protocoles de prĂȘt pour obfusquer les flux.
+
+## Common root causes in hook math
+
+- Mixed rounding semantics: mulDiv floors while later paths effectively round up; or conversions between token/liquidity apply different rounding.
+- Tick alignment errors: using unrounded ticks in one path and tickâspaced rounding in another.
+- BalanceDelta sign/overflow issues when converting between int256 and uint256 during settlement.
+- Precision loss in Q64.96 conversions (sqrtPriceX96) not mirrored in reverse mapping.
+- Accumulation pathways: perâswap remainders tracked as credits that are withdrawable by the caller instead of being burned/zeroâsum.
+
+## Defensive guidance
+
+- Differential testing: mirror the hookâs math vs a reference implementation using highâprecision rational arithmetic and assert equality or bounded error that is always adversarial (never favorable to caller).
+- Invariant/property tests:
+- Sum of deltas (tokens, liquidity) across swap paths and hook adjustments must conserve value modulo fees.
+- No path should create positive net credit for the swap initiator over repeated exactInput iterations.
+- Threshold/tick boundary tests around ±1 wei inputs for both exactInput/exactOutput.
+- Rounding policy: centralize rounding helpers that always round against the user; eliminate inconsistent casts and implicit floors.
+- Settlement sinks: accumulate unavoidable rounding residue to protocol treasury or burn it; never attribute to msg.sender.
+- Rateâlimits/guardrails: minimum swap sizes for rebalancing triggers; disable rebalances if deltas are subâwei; sanityâcheck deltas against expected ranges.
+- Review hook callbacks holistically: beforeSwap/afterSwap and before/after liquidity changes should agree on tick alignment and delta rounding.
+
+## Case study: Bunni V2 (2025â09â02)
+
+- Protocol: Bunni V2 (Uniswap v4 hook) with an LDF applied per swap to rebalance.
+- Root cause: rounding/precision error in LDF liquidity accounting during thresholdâcrossing swaps; perâswap discrepancies accrued as positive credits for the caller.
+- Ethereum leg: attacker took a ~3M USDT flash loan, performed calibrated exactâinput swaps on USDC/USDT to build credits, withdrew inflated balances, repaid, and routed funds via Aave.
+- UniChain leg: repeated the exploit with a 2000 WETH flash loan, siphoning ~1366 WETH and transferring the funds via a bridge to Ethereum.
+- Impact: ~USD 8.3M drained across chains. No user interaction required; entirely onâchain.
+
+## Hunting checklist
+
+- Does the pool use a nonâzero hooks address? Which callbacks are enabled?
+- Are there perâswap redistributions/rebalances using custom math? Any tick/threshold logic?
+- Where are divisions/mulDiv, Q64.96 conversions, or SafeCast used? Are rounding semantics globally consistent?
+- Can you construct Îin that barely crosses a boundary and yields a favorable rounding branch? Test both directions and both exactInput and exactOutput.
+- Does the hook track perâcaller credits or deltas that can be withdrawn later? Ensure residue is neutralized.
+
+## References
+
+- [Bunni V2 Exploit: $8.3M Drained via Liquidity Flaw (summary)](https://quillaudits.medium.com/bunni-v2-exploit-8-3m-drained-50acbdcd9e7b)
+- [Bunni V2 Exploit: Full Hack Analysis](https://www.quillaudits.com/blog/hack-analysis/bunni-v2-exploit)
+- [Uniswap v4 background (QuillAudits research)](https://www.quillaudits.com/research/uniswap-development)
+- [Liquidity mechanics in Uniswap v4 core](https://www.quillaudits.com/research/uniswap-development/uniswap-v4/liquidity-mechanics-in-uniswap-v4-core)
+- [Swap mechanics in Uniswap v4 core](https://www.quillaudits.com/research/uniswap-development/uniswap-v4/swap-mechanics-in-uniswap-v4-core)
+- [Uniswap v4 Hooks and Security Considerations](https://www.quillaudits.com/research/uniswap-development/uniswap-v4/uniswap-v4-hooks-and-security)
+
+{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/crypto-and-stego/blockchain-and-crypto-currencies.md b/src/crypto-and-stego/blockchain-and-crypto-currencies.md
deleted file mode 100644
index 1221a1faa..000000000
--- a/src/crypto-and-stego/blockchain-and-crypto-currencies.md
+++ /dev/null
@@ -1,182 +0,0 @@
-{{#include ../banners/hacktricks-training.md}}
-
-## Concepts de base
-
-- **Smart Contracts** sont définis comme des programmes qui s'exécutent sur une blockchain lorsque certaines conditions sont remplies, automatisant l'exécution des accords sans intermédiaires.
-- **Decentralized Applications (dApps)** s'appuient sur des smart contracts, présentant une interface conviviale et un back-end transparent et auditable.
-- **Tokens & Coins** diffĂ©rencient oĂč les coins servent de monnaie numĂ©rique, tandis que les tokens reprĂ©sentent une valeur ou une propriĂ©tĂ© dans des contextes spĂ©cifiques.
-- **Utility Tokens** donnent accÚs à des services, et **Security Tokens** signifient la propriété d'actifs.
-- **DeFi** signifie Finance Décentralisée, offrant des services financiers sans autorités centrales.
-- **DEX** et **DAOs** font référence aux plateformes d'échange décentralisées et aux organisations autonomes décentralisées, respectivement.
-
-## Mécanismes de consensus
-
-Les mécanismes de consensus garantissent des validations de transactions sécurisées et convenues sur la blockchain :
-
-- **Proof of Work (PoW)** repose sur la puissance de calcul pour la vérification des transactions.
-- **Proof of Stake (PoS)** exige que les validateurs détiennent un certain montant de tokens, réduisant la consommation d'énergie par rapport au PoW.
-
-## Essentiels de Bitcoin
-
-### Transactions
-
-Les transactions Bitcoin impliquent le transfert de fonds entre adresses. Les transactions sont validées par des signatures numériques, garantissant que seul le propriétaire de la clé privée peut initier des transferts.
-
-#### Composants clés :
-
-- **Multisignature Transactions** nécessitent plusieurs signatures pour autoriser une transaction.
-- Les transactions se composent de **inputs** (source de fonds), **outputs** (destination), **fees** (payées aux mineurs) et **scripts** (rÚgles de transaction).
-
-### Lightning Network
-
-Vise à améliorer la scalabilité de Bitcoin en permettant plusieurs transactions au sein d'un canal, ne diffusant l'état final que sur la blockchain.
-
-## Préoccupations en matiÚre de confidentialité de Bitcoin
-
-Les attaques sur la vie privée, telles que **Common Input Ownership** et **UTXO Change Address Detection**, exploitent les modÚles de transaction. Des stratégies comme **Mixers** et **CoinJoin** améliorent l'anonymat en obscurcissant les liens de transaction entre les utilisateurs.
-
-## Acquisition de Bitcoins de maniĂšre anonyme
-
-Les méthodes incluent les échanges en espÚces, le minage et l'utilisation de mixers. **CoinJoin** mélange plusieurs transactions pour compliquer la traçabilité, tandis que **PayJoin** dissimule les CoinJoins en tant que transactions réguliÚres pour une confidentialité accrue.
-
-# Attaques sur la vie privée de Bitcoin
-
-# Résumé des attaques sur la vie privée de Bitcoin
-
-Dans le monde de Bitcoin, la confidentialité des transactions et l'anonymat des utilisateurs sont souvent des sujets de préoccupation. Voici un aperçu simplifié de plusieurs méthodes courantes par lesquelles les attaquants peuvent compromettre la vie privée de Bitcoin.
-
-## **HypothÚse de propriété d'entrée commune**
-
-Il est gĂ©nĂ©ralement rare que des entrĂ©es de diffĂ©rents utilisateurs soient combinĂ©es dans une seule transaction en raison de la complexitĂ© impliquĂ©e. Ainsi, **deux adresses d'entrĂ©e dans la mĂȘme transaction sont souvent supposĂ©es appartenir au mĂȘme propriĂ©taire**.
-
-## **Détection d'adresse de changement UTXO**
-
-Un UTXO, ou **Unspent Transaction Output**, doit ĂȘtre entiĂšrement dĂ©pensĂ© dans une transaction. Si seule une partie est envoyĂ©e Ă une autre adresse, le reste va Ă une nouvelle adresse de changement. Les observateurs peuvent supposer que cette nouvelle adresse appartient Ă l'expĂ©diteur, compromettant ainsi la vie privĂ©e.
-
-### Exemple
-
-Pour atténuer cela, les services de mixage ou l'utilisation de plusieurs adresses peuvent aider à obscurcir la propriété.
-
-## **Exposition sur les réseaux sociaux et forums**
-
-Les utilisateurs partagent parfois leurs adresses Bitcoin en ligne, rendant **facile de lier l'adresse à son propriétaire**.
-
-## **Analyse des graphes de transactions**
-
-Les transactions peuvent ĂȘtre visualisĂ©es sous forme de graphes, rĂ©vĂ©lant des connexions potentielles entre les utilisateurs en fonction du flux de fonds.
-
-## **Heuristique d'entrée inutile (Heuristique de changement optimal)**
-
-Cette heuristique est basée sur l'analyse des transactions avec plusieurs entrées et sorties pour deviner quelle sortie est le changement retournant à l'expéditeur.
-
-### Exemple
-```bash
-2 btc --> 4 btc
-3 btc 1 btc
-```
-Si l'ajout de plus d'entrées rend la sortie de changement plus grande que n'importe quelle entrée unique, cela peut confondre l'heuristique.
-
-## **Réutilisation forcée d'adresse**
-
-Les attaquants peuvent envoyer de petites sommes à des adresses précédemment utilisées, espérant que le destinataire les combine avec d'autres entrées dans de futures transactions, reliant ainsi les adresses ensemble.
-
-### Comportement correct du portefeuille
-
-Les portefeuilles devraient éviter d'utiliser des piÚces reçues sur des adresses déjà utilisées et vides pour prévenir cette fuite de confidentialité.
-
-## **Autres techniques d'analyse de blockchain**
-
-- **Montants de paiement exacts :** Les transactions sans changement sont probablement entre deux adresses appartenant au mĂȘme utilisateur.
-- **Nombres ronds :** Un nombre rond dans une transaction suggÚre qu'il s'agit d'un paiement, avec la sortie non ronde étant probablement le changement.
-- **Empreinte de portefeuille :** Différents portefeuilles ont des modÚles de création de transactions uniques, permettant aux analystes d'identifier le logiciel utilisé et potentiellement l'adresse de changement.
-- **Corrélations de montant et de timing :** La divulgation des heures ou des montants de transaction peut rendre les transactions traçables.
-
-## **Analyse de trafic**
-
-En surveillant le trafic rĂ©seau, les attaquants peuvent potentiellement lier des transactions ou des blocs Ă des adresses IP, compromettant ainsi la confidentialitĂ© des utilisateurs. Cela est particuliĂšrement vrai si une entitĂ© opĂšre de nombreux nĆuds Bitcoin, amĂ©liorant sa capacitĂ© Ă surveiller les transactions.
-
-## Plus
-
-Pour une liste complÚte des attaques sur la vie privée et des défenses, visitez [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
-
-# Transactions Bitcoin anonymes
-
-## Façons d'obtenir des Bitcoins anonymement
-
-- **Transactions en espÚces :** Acquérir des bitcoins par le biais d'espÚces.
-- **Alternatives en espÚces :** Acheter des cartes-cadeaux et les échanger en ligne contre des bitcoins.
-- **Minage :** La méthode la plus privée pour gagner des bitcoins est le minage, surtout lorsqu'il est effectué seul, car les pools de minage peuvent connaßtre l'adresse IP du mineur. [Informations sur les pools de minage](https://en.bitcoin.it/wiki/Pooled_mining)
-- **Vol :** ThĂ©oriquement, voler des bitcoins pourrait ĂȘtre une autre mĂ©thode pour les acquĂ©rir anonymement, bien que cela soit illĂ©gal et non recommandĂ©.
-
-## Services de mélange
-
-En utilisant un service de mélange, un utilisateur peut **envoyer des bitcoins** et recevoir **des bitcoins différents en retour**, ce qui rend difficile la traçabilité du propriétaire d'origine. Cependant, cela nécessite de faire confiance au service pour ne pas conserver de journaux et pour réellement retourner les bitcoins. Des options de mélange alternatives incluent les casinos Bitcoin.
-
-## CoinJoin
-
-**CoinJoin** fusionne plusieurs transactions de diffĂ©rents utilisateurs en une seule, compliquant le processus pour quiconque essaie de faire correspondre les entrĂ©es avec les sorties. MalgrĂ© son efficacitĂ©, les transactions avec des tailles d'entrĂ©e et de sortie uniques peuvent encore potentiellement ĂȘtre tracĂ©es.
-
-Des transactions d'exemple qui ont pu utiliser CoinJoin incluent `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` et `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
-
-Pour plus d'informations, visitez [CoinJoin](https://coinjoin.io/en). Pour un service similaire sur Ethereum, consultez [Tornado Cash](https://tornado.cash), qui anonymise les transactions avec des fonds provenant de mineurs.
-
-## PayJoin
-
-Une variante de CoinJoin, **PayJoin** (ou P2EP), dissimule la transaction entre deux parties (par exemple, un client et un commerçant) comme une transaction ordinaire, sans les caractĂ©ristiques distinctives de sorties Ă©gales de CoinJoin. Cela rend extrĂȘmement difficile la dĂ©tection et pourrait invalider l'heuristique de propriĂ©tĂ© d'entrĂ©e commune utilisĂ©e par les entitĂ©s de surveillance des transactions.
-```plaintext
-2 btc --> 3 btc
-5 btc 4 btc
-```
-Les transactions comme celles-ci pourraient ĂȘtre des PayJoin, amĂ©liorant la confidentialitĂ© tout en restant indiscernables des transactions bitcoin standard.
-
-**L'utilisation de PayJoin pourrait perturber considĂ©rablement les mĂ©thodes de surveillance traditionnelles**, en faisant un dĂ©veloppement prometteur dans la quĂȘte de la confidentialitĂ© transactionnelle.
-
-# Meilleures pratiques pour la confidentialité dans les cryptomonnaies
-
-## **Techniques de synchronisation des portefeuilles**
-
-Pour maintenir la confidentialité et la sécurité, la synchronisation des portefeuilles avec la blockchain est cruciale. Deux méthodes se distinguent :
-
-- **NĆud complet** : En tĂ©lĂ©chargeant l'intĂ©gralitĂ© de la blockchain, un nĆud complet garantit une confidentialitĂ© maximale. Toutes les transactions jamais effectuĂ©es sont stockĂ©es localement, rendant impossible pour les adversaires d'identifier quelles transactions ou adresses intĂ©ressent l'utilisateur.
-- **Filtrage de blocs cĂŽtĂ© client** : Cette mĂ©thode consiste Ă crĂ©er des filtres pour chaque bloc de la blockchain, permettant aux portefeuilles d'identifier les transactions pertinentes sans exposer d'intĂ©rĂȘts spĂ©cifiques aux observateurs du rĂ©seau. Les portefeuilles lĂ©gers tĂ©lĂ©chargent ces filtres, ne rĂ©cupĂ©rant des blocs complets que lorsqu'un match avec les adresses de l'utilisateur est trouvĂ©.
-
-## **Utilisation de Tor pour l'anonymat**
-
-Ătant donnĂ© que Bitcoin fonctionne sur un rĂ©seau pair-Ă -pair, il est recommandĂ© d'utiliser Tor pour masquer votre adresse IP, amĂ©liorant la confidentialitĂ© lors de l'interaction avec le rĂ©seau.
-
-## **Prévention de la réutilisation des adresses**
-
-Pour protĂ©ger la confidentialitĂ©, il est vital d'utiliser une nouvelle adresse pour chaque transaction. La rĂ©utilisation des adresses peut compromettre la confidentialitĂ© en liant les transactions Ă la mĂȘme entitĂ©. Les portefeuilles modernes dĂ©couragent la rĂ©utilisation des adresses par leur conception.
-
-## **Stratégies pour la confidentialité des transactions**
-
-- **Multiples transactions** : Diviser un paiement en plusieurs transactions peut obscurcir le montant de la transaction, contrecarrant les attaques sur la confidentialité.
-- **Ăvitement du changement** : Opter pour des transactions qui ne nĂ©cessitent pas de sorties de changement amĂ©liore la confidentialitĂ© en perturbant les mĂ©thodes de dĂ©tection du changement.
-- **Multiples sorties de changement** : Si éviter le changement n'est pas faisable, générer plusieurs sorties de changement peut néanmoins améliorer la confidentialité.
-
-# **Monero : Un phare d'anonymat**
-
-Monero répond au besoin d'anonymat absolu dans les transactions numériques, établissant une norme élevée pour la confidentialité.
-
-# **Ethereum : Gaz et transactions**
-
-## **Comprendre le gaz**
-
-Le gaz mesure l'effort computationnel nécessaire pour exécuter des opérations sur Ethereum, tarifé en **gwei**. Par exemple, une transaction coûtant 2,310,000 gwei (ou 0.00231 ETH) implique une limite de gaz et un frais de base, avec un pourboire pour inciter les mineurs. Les utilisateurs peuvent définir un frais maximum pour s'assurer de ne pas trop payer, l'excédent étant remboursé.
-
-## **Exécution des transactions**
-
-Les transactions sur Ethereum impliquent un expĂ©diteur et un destinataire, qui peuvent ĂȘtre soit des adresses d'utilisateur, soit des adresses de contrat intelligent. Elles nĂ©cessitent un frais et doivent ĂȘtre minĂ©es. Les informations essentielles dans une transaction incluent le destinataire, la signature de l'expĂ©diteur, la valeur, des donnĂ©es optionnelles, la limite de gaz et les frais. Notamment, l'adresse de l'expĂ©diteur est dĂ©duite de la signature, Ă©liminant le besoin de celle-ci dans les donnĂ©es de la transaction.
-
-Ces pratiques et mécanismes sont fondamentaux pour quiconque cherchant à s'engager avec les cryptomonnaies tout en priorisant la confidentialité et la sécurité.
-
-## Références
-
-- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
-- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
-- [https://bitcoin.stackexchange.com/questions/3718/what-are-multi-signature-transactions](https://bitcoin.stackexchange.com/questions/3718/what-are-multi-signature-transactions)
-- [https://ethereum.org/en/developers/docs/transactions/](https://ethereum.org/en/developers/docs/transactions/)
-- [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
-- [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse)
-
-{{#include ../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
index ab0e304f1..232cfecd4 100644
--- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
+++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md
@@ -4,27 +4,27 @@
## Introduction
-Electron combine un backend local (avec **NodeJS**) et un frontend (**Chromium**), bien qu'il lui manque certains mécanismes de sécurité des navigateurs modernes.
+Electron combine un backend local (avec **NodeJS**) et un frontend (**Chromium**), bien qu'il lui manque certains des mécanismes de sécurité des navigateurs modernes.
-D'habitude, vous pouvez trouver le code de l'application Electron à l'intérieur d'une application `.asar`. Pour obtenir le code, vous devez l'extraire :
+Vous trouverez généralement le code de l'application Electron à l'intérieur d'un fichier `.asar` ; pour obtenir le code, vous devez l'extraire :
```bash
npx asar extract app.asar destfolder #Extract everything
npx asar extract-file app.asar main.js #Extract just a file
```
-Dans le code source d'une application Electron, Ă l'intĂ©rieur de `packet.json`, vous pouvez trouver spĂ©cifiĂ© le fichier `main.js` oĂč les configurations de sĂ©curitĂ© sont dĂ©finies.
+Dans le code source d'une application Electron, Ă l'intĂ©rieur de `packet.json`, vous pouvez trouver spĂ©cifiĂ© le fichier `main.js` oĂč sont dĂ©finies les configurations de sĂ©curitĂ©.
```json
{
"name": "standard-notes",
"main": "./app/index.js",
```
-Electron a 2 types de processus :
+Electron possĂšde 2 types de processus :
-- Main Process (a un accĂšs complet Ă NodeJS)
-- Renderer Process (devrait avoir un accÚs NodeJS restreint pour des raisons de sécurité)
+- Processus principal (a un accĂšs complet Ă NodeJS)
+- Processus de rendu (devrait avoir un accÚs restreint à NodeJS pour des raisons de sécurité)
.png>)
-Un **renderer process** sera une fenĂȘtre de navigateur chargeant un fichier :
+Un **processus de rendu** sera une fenĂȘtre de navigateur chargeant un fichier :
```javascript
const { BrowserWindow } = require("electron")
let win = new BrowserWindow()
@@ -32,20 +32,20 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
-Les paramĂštres du **processus de rendu** peuvent ĂȘtre **configurĂ©s** dans le **processus principal** Ă l'intĂ©rieur du fichier main.js. Certaines des configurations permettront d'**empĂȘcher l'application Electron d'obtenir un RCE** ou d'autres vulnĂ©rabilitĂ©s si les **paramĂštres sont correctement configurĂ©s**.
+Les paramĂštres du **renderer process** peuvent ĂȘtre **configurĂ©s** dans le **main process** Ă l'intĂ©rieur du fichier main.js. Certaines configurations permettront d'**empĂȘcher l'application Electron d'obtenir une RCE** ou d'autres vulnĂ©rabilitĂ©s si les **paramĂštres sont correctement configurĂ©s**.
-L'application electron **pourrait accĂ©der Ă l'appareil** via les Node apis bien qu'il soit possible de la configurer pour l'en empĂȘcher :
+L'application Electron **pourrait accĂ©der Ă l'appareil** via Node apis bien qu'elle puisse ĂȘtre configurĂ©e pour l'en empĂȘcher :
-- **`nodeIntegration`** - est `off` par défaut. Si `on`, permet d'accéder aux fonctionnalités de Node depuis le processus de rendu.
-- **`contextIsolation`** - est `on` par défaut. Si `off`, les processus principal et de rendu ne sont pas isolés.
+- **`nodeIntegration`** - est `off` par défaut. Si on, permet d'accéder aux fonctionnalités de Node depuis le renderer process.
+- **`contextIsolation`** - est `on` par défaut. Si off, main and renderer processes ne sont pas isolés.
- **`preload`** - vide par défaut.
-- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - est `off` par défaut. Il restreindra les actions que NodeJS peut effectuer.
+- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - est off par défaut. Il restreindra les actions que NodeJS peut effectuer.
- Node Integration in Workers
-- **`nodeIntegrationInSubframes`** - est `off` par défaut.
-- Si **`nodeIntegration`** est **enabled**, cela permettrait l'utilisation des **Node.js APIs** dans des pages web **chargées dans des iframes** au sein d'une application Electron.
-- Si **`nodeIntegration`** est **disabled**, alors les preloads se chargeront dans l'iframe
+- **`nodeIntegrationInSubframes`**- est `off` par défaut.
+- Si **`nodeIntegration`** est **activé**, cela permettrait l'utilisation des **Node.js APIs** dans des pages web **chargées dans des iframes** au sein d'une application Electron.
+- Si **`nodeIntegration`** est **désactivé**, alors les preloads se chargeront dans l'iframe
-Exemple de configuration:
+Example of configuration:
```javascript
const mainWindowOptions = {
title: "Discord",
@@ -71,7 +71,7 @@ spellcheck: true,
},
}
```
-Quelques **RCE payloads** depuis [here](https://7as.es/electron/nodeIntegration_rce.txt):
+Quelques **RCE payloads** de [here](https://7as.es/electron/nodeIntegration_rce.txt):
```html
Example Payloads (Windows):
```
### Capturer le trafic
-Modifiez la configuration start-main et ajoutez l'utilisation d'un proxy tel que :
+Modifiez la configuration start-main et ajoutez l'utilisation d'un proxy tel que:
```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
```
## Electron Local Code Injection
-Si vous pouvez exécuter localement une Electron App, il est possible de lui faire exécuter du code javascript arbitraire. Regardez comment dans :
+Si vous pouvez exécuter localement une Electron App, il est possible que vous puissiez lui faire exécuter du code JavaScript arbitraire. Consultez comment dans :
+
{{#ref}}
../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md
@@ -111,7 +112,7 @@ Si vous pouvez exécuter localement une Electron App, il est possible de lui fai
## RCE: XSS + nodeIntegration
-Si la **nodeIntegration** est réglée sur **on**, le JavaScript d'une page web peut utiliser facilement les fonctionnalités de Node.js simplement en appelant `require()`. Par exemple, la façon d'exécuter l'application calc sur Windows est :
+Si la **nodeIntegration** est réglée sur **on**, le JavaScript d'une page web peut utiliser facilement les fonctionnalités de Node.js simplement en appelant `require()`. Par exemple, la maniÚre d'exécuter l'application calc sous Windows est :
```html