Reino: Encapsulation

La encapsulación consiste en crear límites fuertes. En un explorador web esto puede suponer la seguridad de que tu codificación móvil no se vea comprometido por otro código móvil. En el servidor puede significar la diferenciación entre los datos validados y los que no lo están, entre los datos de un usuario y los de otro, o entre los diferentes usuarios, los datos que pueden ver y los que no.

Insecure Storage: Lacking Keychain Protection

Abstract
El método identificado almacena los datos en las llaves a las que les faltan suficientes valores de configuración de cifrado.
Explanation
Las constantes de accesibilidad de las llaves están diseñadas para permitir que las aplicaciones indiquen cuándo se puede acceder a los elementos de las llaves. Al especificar una de las constantes de accesibilidad para un determinado elemento de las llaves, un desarrollador puede indicar al sistema de archivos subyacente que la cifre mediante una clave derivada del UID del dispositivo y del código de acceso del usuario, o mediante una clave basada exclusivamente en el UID del dispositivo. También debe indicar cuándo debe descifrarla automáticamente.

Las constantes de accesibilidad de las claves están diseñadas para asignarse como el valor para la clave kSecAttrAccessible en el diccionario de atributos de las claves. Las definiciones de las diversas constantes de accesibilidad de las claves son las siguientes:

-kSecAttrAccessibleAfterFirstUnlock:
No es posible acceder a los datos del elemento de las llaves después de un reinicio a menos que el usuario haya desbloqueado una vez el dispositivo.
Tras el primer desbloqueo, los datos permanecen accesibles hasta el próximo reinicio. Esta opción se recomienda para los elementos a los que deben tener acceso las aplicaciones en segundo plano. Los elementos con este atributo migran a un dispositivo nuevo cuando se usan copias de seguridad cifradas.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly:
No es posible acceder a los datos del elemento de las llaves después de un reinicio a menos que el usuario haya desbloqueado una vez el dispositivo.
Tras el primer desbloqueo, los datos permanecen accesibles hasta el próximo reinicio. Esta opción se recomienda para los elementos a los que deben tener acceso las aplicaciones en segundo plano. Los elementos con este atributo no migran a un dispositivo nuevo. Por lo tanto, al realizar una restauración con una copia de seguridad de otro dispositivo, estos elementos no estarán presentes.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleAlways:
Siempre se puede acceder a los datos del elemento de las llaves, independientemente de si el dispositivo está bloqueado.
No se recomienda usar esta opción con aplicaciones. Los elementos con este atributo migran a un dispositivo nuevo cuando se usan copias de seguridad cifradas.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly:
Solo se puede acceder a los datos de las llaves cuando el dispositivo está desbloqueado. Solo está disponible si se configura un código de acceso en el dispositivo.
Esta opción se recomienda para los elementos a los que solo es necesario tener acceso mientras la aplicación está en primer plano. Los elementos con este atributo nunca migran a un dispositivo nuevo. Tras restaurar una copia de seguridad en un dispositivo nuevo, no se encuentran estos elementos. Ningún elemento puede almacenarse en esta clase en los dispositivos sin un código de acceso. Si se deshabilita el código de acceso del dispositivo, se eliminan todos los elementos de esta clase.
Disponible en iOS 8.0 y posteriores.

-kSecAttrAccessibleAlwaysThisDeviceOnly:
Siempre se puede acceder a los datos del elemento de las llaves, independientemente de si el dispositivo está bloqueado.
No se recomienda usar esta opción con aplicaciones. Los elementos con este atributo no migran a un dispositivo nuevo. Por lo tanto, al realizar una restauración con una copia de seguridad de otro dispositivo, estos elementos no estarán presentes.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleWhenUnlocked:
Solo se puede acceder a los datos del elemento de las llaves mientras el dispositivo está desbloqueado por el usuario.
Esta opción se recomienda para los elementos a los que solo es necesario acceder mientras la aplicación está en primer plano. Los elementos con este atributo migran a un dispositivo nuevo cuando se usan copias de seguridad cifradas.
Este es el valor predeterminado para los elementos de las llaves que se agregan sin configurar de forma explícita una constante de accesibilidad.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleWhenUnlockedThisDeviceOnly:
Solo se puede acceder a los datos del elemento de las llaves mientras el dispositivo está desbloqueado por el usuario.
Esta opción se recomienda para los elementos a los que solo es necesario acceder mientras la aplicación está en primer plano. Los elementos con este atributo no migran a un dispositivo nuevo. Por lo tanto, al realizar una restauración con una copia de seguridad de otro dispositivo, estos elementos no estarán presentes.
Disponible en iOS 4.0 y posteriores.

Aunque todos los archivos de un dispositivo con iOS, incluidos los que no tienen explícitamente asignada una constante de accesibilidad de las llaves, se almacenan en un formato cifrado, especificar kSecAttrAccessibleAlways provoca un cifrado con una llave derivada exclusivamente del UID del dispositivo. Esto permite que se pueda acceder a dichos archivos siempre que el dispositivo está encendido, incluso cuando está bloqueado con un código de acceso o durante el arranque. Por lo tanto, deben revisarse con atención los usos de kSecAttrAccessibleAlways para determinar si se necesita mayor protección con un nivel de accesibilidad de las llaves más estricto.

Ejemplo 1: en el siguiente ejemplo, el archivo determinado no está protegido (es decir, es accesible en todo momento cuando el dispositivo está encendido).


...
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSData *token = [@"secret" dataUsingEncoding:NSUTF8StringEncoding];

// Configure KeyChain Item
[dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id) kSecClass];
[dict setObject:token forKey:(__bridge id)kSecValueData];
...
[dict setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(__bridge id) kSecAttrAccessible];

OSStatus error = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);
...
References
[1] iOS Security Guide Apple: October 2014
[2] Keychain Services Apple
[3] Keychain Item Accessibility Constants Apple
[4] David Thiel iOS Application Security: The Definitive Guide for Hackers and Developers No Starch Press
[5] Standards Mapping - CIS Azure Kubernetes Service Benchmark 4.0
[6] Standards Mapping - CIS Microsoft Azure Foundations Benchmark partial
[7] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[8] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 4
[9] Standards Mapping - CIS Google Kubernetes Engine Benchmark confidentiality
[10] Standards Mapping - CIS Kubernetes Benchmark complete
[11] Standards Mapping - Common Weakness Enumeration CWE ID 311, CWE ID 312, CWE ID 313, CWE ID 522
[12] Standards Mapping - Common Weakness Enumeration Top 25 2019 [13] CWE ID 287
[13] Standards Mapping - Common Weakness Enumeration Top 25 2020 [14] CWE ID 287, [18] CWE ID 522
[14] Standards Mapping - Common Weakness Enumeration Top 25 2021 [14] CWE ID 287, [21] CWE ID 522
[15] Standards Mapping - Common Weakness Enumeration Top 25 2022 [14] CWE ID 287
[16] Standards Mapping - Common Weakness Enumeration Top 25 2023 [13] CWE ID 287
[17] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001350, CCI-002475
[18] Standards Mapping - FIPS200 MP
[19] Standards Mapping - General Data Protection Regulation (GDPR) Insufficient Data Protection
[20] Standards Mapping - NIST Special Publication 800-53 Revision 4 AU-9 Protection of Audit Information (P1), SC-28 Protection of Information at Rest (P1)
[21] Standards Mapping - NIST Special Publication 800-53 Revision 5 AU-9 Protection of Audit Information, SC-28 Protection of Information at Rest
[22] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[23] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[24] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[25] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[26] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[27] Standards Mapping - OWASP Top 10 2021 A02 Cryptographic Failures
[28] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.6.3 Look-up Secret Verifier Requirements (L2 L3), 2.7.1 Out of Band Verifier Requirements (L1 L2 L3), 2.7.2 Out of Band Verifier Requirements (L1 L2 L3), 2.7.3 Out of Band Verifier Requirements (L1 L2 L3), 2.8.4 Single or Multi Factor One Time Verifier Requirements (L2 L3), 2.8.5 Single or Multi Factor One Time Verifier Requirements (L2 L3), 2.10.2 Service Authentication Requirements (L2 L3), 2.10.3 Service Authentication Requirements (L2 L3), 3.7.1 Defenses Against Session Management Exploits (L1 L2 L3), 6.1.1 Data Classification (L2 L3), 6.1.2 Data Classification (L2 L3), 6.1.3 Data Classification (L2 L3), 6.2.1 Algorithms (L1 L2 L3), 8.1.6 General Data Protection (L3), 8.2.2 Client-side Data Protection (L1 L2 L3), 9.2.3 Server Communications Security Requirements (L2 L3)
[29] Standards Mapping - OWASP Mobile 2014 M2 Insecure Data Storage
[30] Standards Mapping - OWASP Mobile 2024 M9 Insecure Data Storage
[31] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-STORAGE-1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.3
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 7.1 - Use of Cryptography
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 7.1 - Use of Cryptography, Control Objective B.2.3 - Terminal Software Design
[39] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 7.1 - Use of Cryptography, Control Objective B.2.3 - Terminal Software Design
[40] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[41] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[42] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[55] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[56] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[57] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[58] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[59] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[60] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[61] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[62] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[63] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
desc.dataflow.objc.insecure_storage_lacking_keychain_protection
Abstract
El método identificado almacena los datos en las llaves a las que les faltan suficientes valores de configuración de cifrado.
Explanation
Las constantes de accesibilidad de las llaves están diseñadas para permitir que las aplicaciones indiquen cuándo se puede acceder a los elementos de las llaves. Al especificar una de las constantes de accesibilidad para un determinado elemento de las llaves, un desarrollador puede indicar al sistema de archivos subyacente que la cifre mediante una clave derivada del UID del dispositivo y del código de acceso del usuario, o mediante una clave basada exclusivamente en el UID del dispositivo. También debe indicar cuándo debe descifrarla automáticamente.

Las constantes de accesibilidad de las claves están diseñadas para asignarse como el valor para la clave kSecAttrAccessible en el diccionario de atributos de las claves. Las definiciones de las diversas constantes de accesibilidad de las claves son las siguientes:

-kSecAttrAccessibleAfterFirstUnlock:
No es posible acceder a los datos del elemento de las llaves después de un reinicio a menos que el usuario haya desbloqueado una vez el dispositivo.
Tras el primer desbloqueo, los datos permanecen accesibles hasta el próximo reinicio. Esta opción se recomienda para los elementos a los que deben tener acceso las aplicaciones en segundo plano. Los elementos con este atributo migran a un dispositivo nuevo cuando se usan copias de seguridad cifradas.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly:
No es posible acceder a los datos del elemento de las llaves después de un reinicio a menos que el usuario haya desbloqueado una vez el dispositivo.
Tras el primer desbloqueo, los datos permanecen accesibles hasta el próximo reinicio. Esta opción se recomienda para los elementos a los que deben tener acceso las aplicaciones en segundo plano. Los elementos con este atributo no migran a un dispositivo nuevo. Por lo tanto, al realizar una restauración con una copia de seguridad de otro dispositivo, estos elementos no estarán presentes.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleAlways:
Siempre se puede acceder a los datos del elemento de las llaves, independientemente de si el dispositivo está bloqueado.
No se recomienda usar esta opción con aplicaciones. Los elementos con este atributo migran a un dispositivo nuevo cuando se usan copias de seguridad cifradas.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly:
Solo se puede acceder a los datos de las llaves cuando el dispositivo está desbloqueado. Solo está disponible si se configura un código de acceso en el dispositivo.
Esta opción se recomienda para los elementos a los que solo es necesario tener acceso mientras la aplicación está en primer plano. Los elementos con este atributo nunca migran a un dispositivo nuevo. Tras restaurar una copia de seguridad en un dispositivo nuevo, no se encuentran estos elementos. Ningún elemento puede almacenarse en esta clase en los dispositivos sin un código de acceso. Si se deshabilita el código de acceso del dispositivo, se eliminan todos los elementos de esta clase.
Disponible en iOS 8.0 y posteriores.

-kSecAttrAccessibleAlwaysThisDeviceOnly:
Siempre se puede acceder a los datos del elemento de las llaves, independientemente de si el dispositivo está bloqueado.
No se recomienda usar esta opción con aplicaciones. Los elementos con este atributo no migran a un dispositivo nuevo. Por lo tanto, al realizar una restauración con una copia de seguridad de otro dispositivo, estos elementos no estarán presentes.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleWhenUnlocked:
Solo se puede acceder a los datos del elemento de las llaves mientras el dispositivo está desbloqueado por el usuario.
Esta opción se recomienda para los elementos a los que solo es necesario acceder mientras la aplicación está en primer plano. Los elementos con este atributo migran a un dispositivo nuevo cuando se usan copias de seguridad cifradas.
Este es el valor predeterminado para los elementos de las llaves que se agregan sin configurar de forma explícita una constante de accesibilidad.
Disponible en iOS 4.0 y posteriores.

-kSecAttrAccessibleWhenUnlockedThisDeviceOnly:
Solo se puede acceder a los datos del elemento de las llaves mientras el dispositivo está desbloqueado por el usuario.
Esta opción se recomienda para los elementos a los que solo es necesario acceder mientras la aplicación está en primer plano. Los elementos con este atributo no migran a un dispositivo nuevo. Por lo tanto, al realizar una restauración con una copia de seguridad de otro dispositivo, estos elementos no estarán presentes.
Disponible en iOS 4.0 y posteriores.

Aunque todos los archivos de un dispositivo con iOS, incluidos los que no tienen explícitamente asignada una constante de accesibilidad de las llaves, se almacenan en un formato cifrado, especificar kSecAttrAccessibleAlways provoca un cifrado con una llave derivada exclusivamente del UID del dispositivo. Esto permite que se pueda acceder a dichos archivos siempre que el dispositivo está encendido, incluso cuando está bloqueado con un código de acceso o durante el arranque. Por lo tanto, deben revisarse con atención los usos de kSecAttrAccessibleAlways para determinar si se necesita mayor protección con un nivel de accesibilidad de las llaves más estricto.

Ejemplo 1: en el siguiente ejemplo, el archivo determinado no está protegido (es decir, es accesible en todo momento cuando el dispositivo está encendido).


...
// Configure KeyChain Item
let token = "secret"
var query = [String : AnyObject]()
query[kSecClass as String] = kSecClassGenericPassword
query[kSecValueData as String] = token as AnyObject?
...
query[kSecAttrAccessible as String] = kSecAttrAccessibleAlways

SecItemAdd(query as CFDictionary, nil)
...
References
[1] iOS Security Guide Apple: October 2014
[2] Keychain Services Apple
[3] Keychain Item Accessibility Constants Apple
[4] David Thiel iOS Application Security: The Definitive Guide for Hackers and Developers No Starch Press
[5] Standards Mapping - CIS Azure Kubernetes Service Benchmark 4.0
[6] Standards Mapping - CIS Microsoft Azure Foundations Benchmark partial
[7] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[8] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 4
[9] Standards Mapping - CIS Google Kubernetes Engine Benchmark confidentiality
[10] Standards Mapping - CIS Kubernetes Benchmark complete
[11] Standards Mapping - Common Weakness Enumeration CWE ID 311, CWE ID 312, CWE ID 313, CWE ID 522
[12] Standards Mapping - Common Weakness Enumeration Top 25 2019 [13] CWE ID 287
[13] Standards Mapping - Common Weakness Enumeration Top 25 2020 [14] CWE ID 287, [18] CWE ID 522
[14] Standards Mapping - Common Weakness Enumeration Top 25 2021 [14] CWE ID 287, [21] CWE ID 522
[15] Standards Mapping - Common Weakness Enumeration Top 25 2022 [14] CWE ID 287
[16] Standards Mapping - Common Weakness Enumeration Top 25 2023 [13] CWE ID 287
[17] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001350, CCI-002475
[18] Standards Mapping - FIPS200 MP
[19] Standards Mapping - General Data Protection Regulation (GDPR) Insufficient Data Protection
[20] Standards Mapping - NIST Special Publication 800-53 Revision 4 AU-9 Protection of Audit Information (P1), SC-28 Protection of Information at Rest (P1)
[21] Standards Mapping - NIST Special Publication 800-53 Revision 5 AU-9 Protection of Audit Information, SC-28 Protection of Information at Rest
[22] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[23] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[24] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[25] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[26] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[27] Standards Mapping - OWASP Top 10 2021 A02 Cryptographic Failures
[28] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.6.3 Look-up Secret Verifier Requirements (L2 L3), 2.7.1 Out of Band Verifier Requirements (L1 L2 L3), 2.7.2 Out of Band Verifier Requirements (L1 L2 L3), 2.7.3 Out of Band Verifier Requirements (L1 L2 L3), 2.8.4 Single or Multi Factor One Time Verifier Requirements (L2 L3), 2.8.5 Single or Multi Factor One Time Verifier Requirements (L2 L3), 2.10.2 Service Authentication Requirements (L2 L3), 2.10.3 Service Authentication Requirements (L2 L3), 3.7.1 Defenses Against Session Management Exploits (L1 L2 L3), 6.1.1 Data Classification (L2 L3), 6.1.2 Data Classification (L2 L3), 6.1.3 Data Classification (L2 L3), 6.2.1 Algorithms (L1 L2 L3), 8.1.6 General Data Protection (L3), 8.2.2 Client-side Data Protection (L1 L2 L3), 9.2.3 Server Communications Security Requirements (L2 L3)
[29] Standards Mapping - OWASP Mobile 2014 M2 Insecure Data Storage
[30] Standards Mapping - OWASP Mobile 2024 M9 Insecure Data Storage
[31] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-STORAGE-1
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[35] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.3
[36] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 7.1 - Use of Cryptography
[38] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 7.1 - Use of Cryptography, Control Objective B.2.3 - Terminal Software Design
[39] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 7.1 - Use of Cryptography, Control Objective B.2.3 - Terminal Software Design
[40] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[41] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[42] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[50] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[51] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[52] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[53] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[54] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[55] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[56] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[57] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[58] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[59] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[60] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[61] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[62] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[63] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
desc.dataflow.swift.insecure_storage_lacking_keychain_protection