Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
apple-positional-audio-codec-invalid-header — CVE-2025-31200 - @Noahhw46 figured it out | Kitploit
Outils/GitHubGitHub/zhuowei/apple-positional-audio-codec-invalid-header
Memory ForensicsVulnerability AnalysisExploitationReverse EngineeringFuzzingBinary Exploitation
GitHubzhuowei/apple-positional-audio-codec-invalid-header

apple-positional-audio-codec-invalid-header

CVE-2025-31200 - @Noahhw46 figured it out

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
11819il y a 1 anVérifié par Kitploit

Preuve de concept pour le correctif CoreAudio (CVE-2025-31200) dans iOS 18.4.1. Article ici https://blog.noahhw.dev/posts/cve-2025-31200/.

Mise à jour du 27/05/2025

J’ai réussi à transformer cela en une écriture contrôlée, même si elle n’est pas encore arbitraire. L’article arrive bientôt. Pour le constater par vous-même, vous devrez compiler sur une version de macOS antérieure au correctif : < 15.4.1. Vous pouvez lire l'audio avec le hook lldb check-mismatch (en utilisant un simple harnais qui se contente de jouer l'audio) pour observer l’écriture. Ce n’est pas encore une écriture arbitraire parfaite, comme je l’ai mentionné plus haut pour plusieurs raisons – principalement parce que je ne suis pas encore sûr à 100 % à quel stade du pipeline de décodage ces valeurs du tampon d’images se trouvent lorsqu’elles sont remappées. Je m’arrête ici pour travailler sur l’article, si quelqu’un veut reprendre le dossier.

Mise à jour du 21/05/2025

Moi, @noahhw46 (je n’y serais pas arrivé sans cette configuration @zhouwei), j’ai trouvé (article à venir). Cependant, il reste encore beaucoup à comprendre. J’ai ajouté ici les premières pistes des prochaines étapes de mon investigation pour montrer exactement ce que le bogue fait. check-mismatch est un autre script lldb qui peut être utilisé avec un poc fonctionnel pour montrer précisément l’incohérence créée entre mRemappingArray et la carte de permutation dans APACChannelRemapper::Process (en réalité dans APACHOADecoder::DecodeAPACFrame).


root@kitploit:~
Le tableau mRemappingArray est dimensionné en fonction des deux octets inférieurs de mChannelLayoutTag.
En créant une incohérence entre eux, une étape ultérieure du traitement dans APACHOADecoder::DecodeAPACFrame est corrompue.
Lorsque APACHOADecoder traite l’image APAC (la permute selon le tableau de remappage des canaux), il utilise mRemappingArray comme carte de permutation pour effectuer le remappage des canaux. Il semble que les données de l’image en cours de remappage soient dimensionnées en fonction de mTotalComponenets.

Lorsque vous lisez le fichier audio output.mp4 (par exemple avec AVAudioPlayer), APACChannelRemapper::Process lira puis écrira hors limites.

Vous pouvez constater la première lecture hors limites si vous activez Guard Malloc dans Xcode :

Xcode affichant un crash dans APACChannelRemapper::Process

Sans Guard Malloc, APACHOADecoder::DecodeAPACFrame plantera plus tard avec un memmove invalide :

Xcode affichant un crash dans _platform_memmove

L’ancien README de @zhuowei est ci-dessous :

J’essaie de comprendre le correctif CoreAudio (CVE-2025-31200) dans iOS 18.4.1.

Je n’ai pas encore trouvé.

Actuellement, j’obtiens différents messages d’erreur lors du décodage de output.mp4 sur macOS 15.4.1 :

root@kitploit:~
error	01:10:26.743480-0400	getaudiolength	<private>:548    Invalid mRemappingArray bitstream in hoa::CodecConfig::Deserialize()
error	01:10:26.743499-0400	getaudiolength	<private>:860    Error in deserializing ASC components

vs le simulateur Xcode pour visionOS 2.2 :

root@kitploit:~
error	01:09:21.841805-0400	VisionOSEvaluation	          APACProfile.cpp:424    ERROR: Wrong profile index in GlobalConfig
error	01:09:21.841914-0400	VisionOSEvaluation	     APACGlobalConfig.cpp:894    Profile and level data could not be validated

donc je tombe sur la nouvelle vérification, mais je ne sais pas comment faire pour qu’elle écrive effectivement quelque chose.

informations sur la fonction modifiée

La fonction modifiée semble être apac::hoa::CodecConfig::Deserialize dans /System/Library/Frameworks/AudioToolbox.framework/AudioCodecs.

APAC est l’Apple Positional Audio Codec

HOA signifie Higher-order Ambisonics.

Si vous regardez un exemple de fichier du traqueur de problèmes ffmpeg :

root@kitploit:~
$ avmediainfo ~/Downloads/clap.MOV 
Asset: /Users/zhuowei/Downloads/clap.MOV
<...>
Track 3: Sound 'soun'
	Enabled: No
	Format Description 1:
		Format: APAC 'apac'
		Channel Layout: High-Order Ambisonics, ACN/SN3D
		Sample rate: 48000.0
		Bytes per packet: 0
		Frames per packet: 1024
		Bytes per frame: 0
		Channels per frame: 4
		Bits per channel: 0
	System support for decoding this track: Yes
	Data size: 43577 bytes
	Media time scale: 48000
	Duration: 0.898 seconds
	Estimated data rate: 363.142 kbit/s
	Extended language tag: und
	1 segment present
	Index   Media Start  Media Duration   Track Start  Track Duration 
	    1  00:00:00.000    00:00:00.898  00:00:00.000    00:00:00.898
	Member of alternate group 0: (2, 3)

Vous pouvez convertir en APAC avec afconvert -o sound440.m4a -d apac -f mp4f sound440hz.wav.

En utilisant bindiff sur iOS 18.4.1 vs 18.4, il semble que la lecture de mRemappingArray vérifie désormais le AudioChannelLayout* global à l’offset 0x58 pour le nombre de canaux au lieu du AudioChannelLayout* de remappage à l’offset 0x78.

Le fichier encodeme.mm encode l’APAC, et un script LLDB force des éléments supplémentaires dans mRemappingArray et le AudioChannelLayout de remappage :

root@kitploit:~
./build_encodeme.sh
./run_encodeme.sh
Télécharger l’outil