0 votes

permission execve refusée sous /data

J'ai rencontré un problème étrange sur un Samsung Galaxy Note 2, fonctionnant sous Android 4.3, avec une rom rootée origin-forgetton.

  1. getenforce retourne "Permissive", donc selinux est Permissive.
  2. cat /proc/self/status retourne CapBnd/CapEff/CapPrm ffffffffffffffff après su, donc toutes les capacités sont accordées.
  3. su provient du SuperSU de Chainfire.

Le syndrome est, après su tout exécutable sous /data appelant execve() échoue avec EACCES. MAIS, execve() sous /data est autorisé par un utilisateur normal.

Pour démontrer, toutes les expériences suivantes sont réalisées après su. Compilez le programme suivant dans un binaire lié statiquement, disons execve.

# gcc -static execve.c -o execve

/* execve.c */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
  char *newargv[] = { NULL, "hello", "world", NULL };
  char *newenviron[] = { NULL };

  if (argc != 2) {
    fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  newargv[0] = argv[1];

  execve(argv[1], newargv, newenviron);
  perror("execve");   /* execve() only returns on error */
  exit(EXIT_FAILURE);
}

Exécuter "execve /system/bin/ls" devrait être équivalent à "ls hello world".

Mais si execve est placé sous n'importe quel sous-répertoire de /data, "execve /system/bin/ls" donne comme résultat "Permission refusée".

  1. Si execve est placé dans l'un de /, /system, /cache, /mnt/obb. execve() fonctionne.

  2. Remonter /data avec exactement les mêmes options de montage que /cache n'aide pas.

  3. La liaison symétrique d'un sous-répertoire de /cache à /data contenant execve fonctionne.

    ln -s /cache/test /data/test # /data/test/execve fonctionne

    Et à l'inverse, l'execve ne fonctionne pas.

    ln -s /cache/test1 /data/test1 # /cache/test1/execve Permission refusée

  4. Lier le montage /data à /bind. /bind/execve fonctionne, mais pas /data/execve.

    mount -o bind /data /bind

Conclusion : Il y a quelque chose qui empêche tout exécutable sous /data de faire l'appel système execve(). Le mécanisme n'a rien à voir avec les attributs du système de fichiers, et le lien symbolique est déréférencé avant que le mécanisme ne soit appliqué.

Question : Quel mécanisme dans Android pourrait donner ce comportement étrange ?

Référence :

0voto

Jorrit Points 116

Samsung a quelques restrictions codées en dur directement dans le noyau. Ces choses diffèrent par appareil, par noyau/firmware, et c'est un vrai problème de travailler avec ou autour. Essayez un autre firmware.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X