Restricciones para SmartApps
Para proteger la seguridad y estabilidad de nuestro ecosistema, se han definido restricciones sobre el uso de funciones de la terminal Point. Los integradores deberán cumplir con estas medidas para que su aplicación pueda ejecutarse en nuestros dispositivos sin comprometer la seguridad del sistema ni de los usuarios.
Se debe implementar el uso de OAuth para obtener información de pagos, acceder a los datos de la persona usuaria o ejecutar operaciones sobre la cuenta del vendedor, como cobros o devoluciones.
En la configuración de la aplicación, se debe definir el nivel mínimo de API (minSdkVersion) en función del sistema operativo de la terminal que se utilizará.
- Point Smart A910 usa Android 6 - API level mínimo: 23
- Point Smart N950 usa Android 12 - API level mínimo: 31
Los terminals Point utilizan un sistema operativo basado en AOSP (Android Open Source Project), lo que significa que no incluyen servicios de Google y Firebase de forma predeterminada. Para verificar qué servicios están disponibles en estos dispositivos, consulta la documentación oficial de Firebase.
Al construir la aplicación, se recomienda utilizar librerías en sus versiones más recientes y con soporte activo, a fin de reducir la exposición a vulnerabilidades conocidas.
Para evaluar la seguridad de las dependencias, se sugiere emplear herramientas especializadas como Snyk o SonaType, que permiten identificar riesgos a partir de bases de datos públicas de vulnerabilidades (como el NVD o CVE Details) y ofrecen recomendaciones para corregirlas o actualizarlas.
Las funcionalidades asociadas al flujo de cobro (como la lectura y procesamiento de tarjetas, impresión de comprobantes, uso de Bluetooth y acceso a la cámara para escaneo de códigos de barras o QR) deben ser invocadas exclusivamente a través del SDK de Mercado Pago y no mediante el uso directo de permisos declarados en el archivo AndroidManifest.
Para permitir que la aplicación se conecte a servicios en línea y utilice funcionalidades básicas de la terminal, se autorizan únicamente los siguientes permisos:
android.permission.ACCESS_COARSE_LOCATIONandroid.permission.ACCESS_FINE_LOCATIONandroid.permission.ACCESS_NETWORK_STATEandroid.permission.FLASHLIGHTandroid.permission.FOREGROUND_SERVICEandroid.permission.INTERNETandroid.permission.POST_NOTIFICATIONSandroid.permission.RECEIVE_BOOT_COMPLETEDandroid.permission.SCHEDULE_EXACT_ALARMandroid.permission.VIBRATEandroid.permission.WAKE_LOCK
Por otra parte, y conforme a las políticas de seguridad, existen permisos que no están admitidos, como por ejemplo:
android.permission.ACCESS_GPSandroid.permission.ACCESS_INSTANT_APPSandroid.permission.ACCESS_LOCATIONandroid.permission.ACCESS_WEBVIEWandroid.permission.ACCESS_WIFI_STATEandroid.permission.BIND_ACCESSIBILITY_SERVICEandroid.permission.BLUETOOTHandroid.permission.BLUETOOTH_ADMINandroid.permission.BLUETOOTH_ADVERTISEandroid.permission.BLUETOOTH_CONNECTandroid.permission.BLUETOOTH_PRIVILEGEDandroid.permission.BLUETOOTH_SCANandroid.permission.BROADCAST_STICKYandroid.permission.CHANGE_NETWORK_STATEandroid.permission.CHANGE_WIFI_STATEandroid.permission.CLOUDPOS_PRINTERandroid.permission.DELETE_PACKAGESandroid.permission.DEVICE_POWERandroid.permission.DISABLE_KEYGUARDandroid.permission.DISABLE_STATUS_BARandroid.permission.DOWNLOAD_WITHOUT_NOTIFICATIONandroid.permission.DUMPandroid.permission.EXPAND_STATUS_BARandroid.permission.FOREGROUND_SERVICE_DATA_SYNCandroid.permission.GET_ACCOUNTSandroid.permission.GET_TASKSandroid.permission.INSTALL_PACKAGESandroid.permission.INSTALL_SHORTCUTandroid.permission.INTERACT_ACROSS_USERS_FULLandroid.permission.KILL_BACKGROUND_PROCESSESandroid.permission.MANAGE_EXTERNAL_STORAGEandroid.permission.MANAGE_NEWLANDandroid.permission.MANAGE_NEWLAND_ICCARDandroid.permission.MANAGE_NEWLAND_PAYCOMMONandroid.permission.MANAGE_NEWLAND_PINandroid.permission.MODIFY_AUDIO_SETTINGSandroid.permission.MODIFY_PHONE_STATEandroid.permission.MOUNT_UNMOUNT_FILESYSTEMSandroid.permission.NEARBY_WIFI_DEVICESandroid.permission.NFCandroid.permission.QUERY_ALL_PACKAGESandroid.permission.READ_EXTERNAL_STORAGEandroid.permission.READ_LOGSandroid.permission.READ_PHONE_STATEandroid.permission.READ_PRIVILEGED_PHONE_STATEandroid.permission.READ_PROFILEandroid.permission.READ_SMSandroid.permission.READ_USER_DICTIONARYandroid.permission.REBOOTandroid.permission.RECORD_AUDIOandroid.permission.REORDER_TASKSandroid.permission.REQUEST_DELETE_PACKAGESandroid.permission.REQUEST_INSTALL_PACKAGESandroid.permission.SEND_SMSandroid.permission.SET_TIMEandroid.permission.SET_TIME_ZONEandroid.permission.SET_WALLPAPERandroid.permission.SET_WALLPAPER_HINTSandroid.permission.SUNMI_RESET_APPSandroid.permission.SYSTEM_ALERT_WINDOWandroid.permission.USB_PERMISSIONandroid.permission.USB_SETandroid.permission.USE_BIOMETRICandroid.permission.USE_FINGERPRINTandroid.permission.USE_PERIPHERAL_IOandroid.permission.WRITE_APN_SETTINGSandroid.permission.WRITE_CALENDARandroid.permission.WRITE_EXTERNAL_STORAGEandroid.permission.WRITE_OWNER_DATAandroid.permission.WRITE_SECURE_SETTINGSandroid.permission.WRITE_SETTINGS
Asimismo, se prohíbe el uso de permisos o librerías asociadas a integraciones de terceros, tales como:
br.com.uol.pagseguro.*cielo.lio.permission.*com.getnet.*com.pax.*com.sunmi.*
En aquellos casos donde se requieran funcionalidades específicas para el negocio del integrador, el equipo de Mercado Pago evaluará la solicitud y/o propondrá alternativas de implementación que permitan el correcto funcionamiento de la aplicación sin comprometer la seguridad del entorno. Cada aplicación será analizada de forma particular durante el proceso de revisión.
- Uso de Webview.
- Uso de servicios de accesibilidad.
- Acceso a almacenamiento externo mediante tarjeta SD.
- Configuraciones de depuración habilitadas en el AndroidManifest, como
allowBackup=true,testOnly=true,debuggable=true, entre otras. - Uso de comunicaciones en texto claro o con la opción
cleartextTrafficPermitted=truedentro del AndroidManifest. - Dependencias de funcionalidades basadas en Google Play Services, las cuales no están disponibles en terminals con Android AOSP, como: Google Maps API, Calendar, autenticación con cuentas de Google, entre otras.
- Uso del puerto USB para transmisión de información.
- Inclusión de íconos de redes sociales dentro de la aplicación, con el fin de prevenir una navegación no autorizada a través de ellas.
- El package name debe cumplir con estas condiciones:
- Solo caracteres alfanuméricos (a-z, A-Z, 0-9).
- Separado por puntos (.).
- Formato tipo dominio inverso:
com.example.app. - Sin espacios, guiones u otros caracteres especiales.
- Lo que no está permitido en las aplicaciones:
- Usar el nombre "Mercado Pago" o "Mercado Libre" en el nombre de la app o en el package name.
- Mostrar logotipos de Mercado Pago, Mercado Libre o de competidores.
- Contenido inapropiado (imágenes o palabras inadecuadas).
Se sugiere la implementación de las siguientes buenas prácticas durante la fase de desarrollo de la aplicación, con el objetivo de fortalecer su seguridad, minimizar riesgos asociados a la exposición de datos sensibles y evitar el compromiso del ecosistema de pago.
- Evitar incrustar credenciales o certificados en texto plano. En su lugar, considerar el uso de técnicas de ofuscación y protección de código.
- Evitar el uso de algoritmos criptográficos obsoletos como DES, RC4 o MD5. Utilizar en su lugar AES (mínimo 128 bits) para cifrado simétrico, SHA-256 o SHA-3 para funciones hash, y RSA (≥2048 bits) o ECDSA para cifrado y firmas digitales.
- Prevenir la exposición o transmisión insegura de información sensible de los usuarios finales. Evitar el uso de texto plano y asegurar que toda la comunicación se realice mediante canales cifrados, utilizando TLS con el fin de proteger la seguridad y privacidad de los datos.
- Para el almacenamiento de datos sensibles (como tokens de sesión), se recomienda utilizar Android Keystore en lugar de SQLite o SharedPreferences.
- Realizar análisis de seguridad utilizando herramientas como SAST, SCA, DAST e IAST, y complementar con modelado de amenazas, revisiones de código periódicas y pruebas de penetración.
- En dispositivos con conexión a internet mediante datos móviles, asegurar que la comunicación se establezca únicamente con backends legítimos.