Restrições para SmartApps
Para proteger a segurança e estabilidade do nosso ecossistema, foram definidas restrições sobre o uso de funções do terminal Point. Os integradores deverão cumprir com essas medidas para que seu aplicativo possa ser executada em nossos dispositivos sem comprometer a segurança do sistema nem dos usuários.
Deve-se implementar o uso de OAuth para obter informações de pagamentos, acessar os dados do usuário ou executar operações sobre a conta do vendedor, como cobranças ou devoluções.
Na configuração do aplicativo, deve-se definir o nível mínimo de API (minSdkVersion) em função do sistema operacional do terminal que será utilizado.
- Point Smart A910 usa Android 6 - API level mínimo: 23
- Point Smart N950 usa Android 12 - API level mínimo: 31
Os terminals Point utilizam um sistema operacional baseado em AOSP (Android Open Source Project), o que significa que não incluem serviços do Google e Firebase de forma padrão. Para verificar quais serviços estão disponíveis nestes dispositivos, consulte a documentação oficial do Firebase.
Ao construir um aplicativo, recomenda-se utilizar bibliotecas em suas versões mais recentes e com suporte ativo, a fim de reduzir a exposição a vulnerabilidades conhecidas.
Para avaliar a segurança das dependências, sugere-se empregar ferramentas especializadas como Snyk ou SonaType, que permitem identificar riscos a partir de bases de dados públicas de vulnerabilidades (como o NVD ou CVE Details) e oferecem recomendações para corrigi-las ou atualizá-las.
As funcionalidades associadas ao fluxo de cobrança (como a leitura e processamento de cartões, impressão de comprovantes, uso de Bluetooth e acesso à câmera para escaneamento de códigos de barras ou QR) devem ser invocadas exclusivamente através do SDK do Mercado Pago e não mediante o uso direto de permissões declaradas no arquivo AndroidManifest.
Para permitir que o aplicativo se conecte a serviços online e utilize funcionalidades básicas do terminal, são autorizadas unicamente as seguintes permissões:
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 outro lado, e conforme as políticas de segurança, existem permissões que não são admitidas, como por exemplo:
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
Da mesma forma, é proibido o uso de permissões ou bibliotecas associadas a integrações de terceiros, tais como:
br.com.uol.pagseguro.*cielo.lio.permission.*com.getnet.*com.pax.*com.sunmi.*
Naqueles casos onde sejam requeridas funcionalidades específicas para o negócio do integrador, a equipe do Mercado Pago avaliará a solicitação e/ou proporá alternativas de implementação que permitam o correto funcionamento do aplicativo sem comprometer a segurança do ambiente. Cada aplicativo será analisado de forma particular durante o processo de revisão.
- Uso de Webview.
- Uso de serviços de acessibilidade.
- Acesso a armazenamento externo mediante cartão SD.
- Configurações de depuração habilitadas no AndroidManifest, como
allowBackup=true,testOnly=true,debuggable=true, entre outras. - Uso de comunicações em texto claro ou com a opção
cleartextTrafficPermitted=truedentro do AndroidManifest. - Dependências de funcionalidades baseadas em Google Play Services, as quais não estão disponíveis em terminals com Android AOSP, como: Google Maps API, Calendar, autenticação com contas do Google, entre outras.
- Uso da porta USB para transmissão de informação.
- Inclusão de ícones de redes sociais dentro do aplicativo, com o fim de prevenir uma navegação não autorizada através delas.
- O package name deve cumprir as seguintes condições:
- Apenas caracteres alfanuméricos (a-z, A-Z, 0-9).
- Separado por pontos (.).
- Formato do tipo domínio invertido:
com.example.app. - Sem espaços, hífens ou outros caracteres especiais.
- O que não é permitido nos aplicativos:
- Uso do nome "Mercado Pago" ou "Mercado Livre" no nome do aplicativo ou no package name.
- Exibição de logotipos do Mercado Pago, Mercado Livre ou de concorrentes.
- Conteúdo inapropriado (imagens ou palavras inadequadas).
Sugere-se a implementação das seguintes boas práticas durante a fase de desenvolvimento do aplicativo, com o objetivo de fortalecer sua segurança, minimizar riscos associados à exposição de dados sensíveis e evitar o comprometimento do ecossistema de pagamento.
- Evitar incorporar credenciais ou certificados em texto claro. Em seu lugar, considerar o uso de técnicas de ofuscação e proteção de código.
- Evitar o uso de algoritmos criptográficos obsoletos como DES, RC4 ou MD5. Utilizar em seu lugar AES (mínimo 128 bits) para cifração simétrica, SHA-256 ou SHA-3 para funções hash, e RSA (≥2048 bits) ou ECDSA para cifração e assinaturas digitais.
- Prevenir a exposição ou transmissão insegura de informação sensível dos usuários finais. Evitar o uso de texto claro e assegurar que toda a comunicação seja realizada mediante canais cifrados, utilizando TLS com o fim de proteger a segurança e privacidade dos dados.
- Para o armazenamento de dados sensíveis (como tokens de sessão), recomenda-se utilizar Android Keystore em lugar de SQLite ou SharedPreferences.
- Realizar análises de segurança utilizando ferramentas como SAST, SCA, DAST e IAST, e complementar com modelagem de ameaças, revisões de código periódicas e testes de penetração.
- Em dispositivos com conexão à internet mediante dados móveis, assegurar que a comunicação se estabeleça unicamente com backends legítimos.