Faille dans Spigot

Ophis_Ouroboros

Aventurier
6 Mai 2015
5
0
2
30
Bonjour à tous,

je suis administrateur d'un serveur minecraft et l'autre jour une personne est venue nous voir pour essayer de nous vendre une nouvelle version de spigot car il nous disait que notre version actuel possédais une faille qui lui permettais via un programme java de créer des entitée fantome sur notre serveur et le faire crasher juste en effectuant un clique droit avec sa souris.

Il s'est exécuter et nous a prouver que cela fonctionnais seulement il a réitérer sont action plusieurs fois et ont a dû le bannir IP? j'aurais aimer savoir si vous pouviez m'aider à trouver un moyen de contrer ses actions voila les logs au moment ou il a fait crash le serveur et notre codeur java est presque sûr que sa provient de là.

[00:40:58] [Netty IO #0/WARN]: Selector.select() returned prematurely 512 times in a row; rebuilding selector.
[00:40:58] [Netty IO #0/INFO]: Migrated 3 channel(s) to the new Selector.
 

Atiria

Atiria - Vanilla, UHC & Freebuild
10 Avril 2015
424
110
105
34
Atiria
www.atiria.fr
Essaye de mettre dans une version plus récente, peut-être corrige t-il cette faille. D'ailleurs, la 1.8.4 corrige justement ce type de faille (source).

Tout est dit.
La faille est une injection d'entités en arborescence exponentielle. Ça a été corrigé depuis (c'était d'ailleurs une faille Minecraft, pas seulement Spigot).
 

robin4002

Expert en informatique et systèmes d'information
Staff
Responsable technique
Responsable forum
12 Novembre 2012
20 855
157
3 002
347
26
Alsace
www.minecraftforgefrance.fr

Ophis_Ouroboros

Aventurier
6 Mai 2015
5
0
2
30
ça m'as tout l'air d'être ce dont vous parler cependant à chaque fois que nous avons voulu passez en 1.8 les joueurs ont toujours une une quantité astronomique de problème et la plupart ne possède pas la 1.8 donc pour que nos joueurs continue à jouer tranquillement nous avons décider de rester en 1.7.10, en espérant que la 1.9 serais plus stable et que d'ici la les launcher cracker seraient plus évoluer. Donc auriez vous une solutions pour régler le problème en 1.7.10 ou cela n'est pas possible et un passage en 1.8 est obligatoire ?

ps: merci de m'avoir répondu aussi vite et aussi bien, c'est rare de voir des personnes tels que vous.
 

robin4002

Expert en informatique et systèmes d'information
Staff
Responsable technique
Responsable forum
12 Novembre 2012
20 855
157
3 002
347
26
Alsace
www.minecraftforgefrance.fr
La seule solution que je connais est de passer en 1.8.4, c'est la seule version qui corrige le problème.
Peut-être qu'il existe des patchs ou des versions modifiés de spigot / bukkit.
Je viens de chercher sur google, j'ai juste trouvé d'autre article concernant cette faille, mais je n'ai pas trouvé de correctif pour les anciennes versions :/

ÉDIT : je suis en train de regarder le programme qui permet d'exploiter la faille :
https://github.com/ammaraskar/pyCraft/blob/nbt_exploit/start.py#L92
Visiblement le programme en question créer un paquet BlockPlacement (le paquet utilisé pour poser un bloc), dans ce paquet l'itemstack que le joueur a en main est envoyé. Et lui il charge le tag nbt de l'itemstack avec pleins pleins de valeurs :
https://github.com/ammaraskar/pyCraft/blob/nbt_exploit/start.py#L69-L83
Et c'est donc ça qui crash.
Je suis en train de regarder du côté de Minecraft, le paquet est lu comme ça :
Code:
    public void readPacketData(PacketBuffer p_148837_1_) throws IOException
    {
        this.field_149583_a = p_148837_1_.readInt();
        this.field_149581_b = p_148837_1_.readUnsignedByte();
        this.field_149582_c = p_148837_1_.readInt();
        this.field_149579_d = p_148837_1_.readUnsignedByte();
        this.field_149580_e = p_148837_1_.readItemStackFromBuffer();
        this.field_149577_f = (float)p_148837_1_.readUnsignedByte() / 16.0F;
        this.field_149578_g = (float)p_148837_1_.readUnsignedByte() / 16.0F;
        this.field_149584_h = (float)p_148837_1_.readUnsignedByte() / 16.0F;
    }
C'est au niveau du "this.field_149580_e = p_148837_1_.readItemStackFromBuffer();" que tout se passe.
Dans la classe PacketBuffer la fonction ressemble à ça :
Code:
    public ItemStack readItemStackFromBuffer() throws IOException
    {
        ItemStack itemstack = null;
        short short1 = this.readShort();
 
        if (short1 >= 0)
        {
            byte b0 = this.readByte();
            short short2 = this.readShort();
            itemstack = new ItemStack(Item.getItemById(short1), b0, short2);
            itemstack.stackTagCompound = this.readNBTTagCompoundFromBuffer();
        }
 
        return itemstack;
    }
Donc ici le problème se trouve au niveau du
itemstack.stackTagCompound = this.readNBTTagCompoundFromBuffer();
Et la fonction readNBTTagCompoundFromBuffer
Code:
    public NBTTagCompound readNBTTagCompoundFromBuffer() throws IOException
    {
        short short1 = this.readShort();
 
        if (short1 < 0)
        {
            return null;
        }
        else
        {
            byte[] abyte = new byte[short1];
            this.readBytes(abyte);
            return CompressedStreamTools.func_152457_a(abyte, new NBTSizeTracker(2097152L));
        }
    }
short1 m'a l'air d'être la taille du tag NBT, vu qu'il y a une condition
Code:
        if (short1 < 0)
        {
            return null;
        }
qui permet de mettre à null le tab nbt si il est inexistant. En changeant cette condition par :
Code:
        if (short1 < 0 || short1 > une taille ici)
        {
            return null;
        }
Et en mettant 50 par exemple à la place de une taille ici, on pourrait simplement ignorer tous les tags de taille supérieur à 50.
Le seul problème c'est que je viens de regarder ça sur les sources de Minecraft, je ne sais pas où obtenir les sources de spigot ou de bukkit (depuis qu'il y a eu l'affaire avec Bukkit ce n'est plus aussi facile de les avoirs), et je ne sais pas comment compiler spigot ni bukkit. Mais ça doit pas être trop difficile. Je vais chercher.

ÉDIT : impossible de mettre la main sur les sources de spigot 1.7.10, je n'arrive que à obtenir ceux de la 1.8 avec leur outil de build.
Je vais tenter autre chose, mais je ne suis pas sûr que ça va fonctionner.
Fonctionne pas :/ Désolé. Il me faudrait absolument les sources de spigot 1.7.10 pour corriger ça.
 

Ophis_Ouroboros

Aventurier
6 Mai 2015
5
0
2
30
robin4002 je te remercie du travail que tu accompli pour un inconnue même si il est vraie que cela a l'air de te passionner cela n'en reste pas moins bénévole donc je te remercie énormément, je vois ce que tu as essayer de m'expliquer et j'ai compris le principale je demanderais a notre codeur java et au fondateur de notre serveur qui devrai revenir de vacance d'ici ce soir de venir jeter un coup l'un deux aura peux être les sources que tu recherches. sinon il semblerais que j'ai trouver un correctif qui serais vendu 10 euros.

https://minedev.fr ( je n'ai pas mis le lien complet juste le lien du site qui le propose pour ne pas faire de la publicités mais c'est dans la partie boutique/configuration et ils donnent plus de détail ici

http://www./forum/index.php?threads/tuto-faille-nbt.152646/

Donc j'aimerais savoir si ce site est digne de confiance et si vous n'en savez rien ont pourrais peux être envisager de payer tes services si tu pourrais nous expliquer comment corriger le problème, ce qui j'en suis conscient, ne peux arriver que si tu obtiens les sources de spigot 1.7.10.

Donc je ferais venir les autres administrateur du serveur sous lequel je suis car je dois bien avouer que de nous 3 je suis le moins qualifier pour t'aider à nous aider. Mais je te remercie encore une fois de l'aide que tu apporte à moi et a ceux que ce problème toucherais.
 

robin4002

Expert en informatique et systèmes d'information
Staff
Responsable technique
Responsable forum
12 Novembre 2012
20 855
157
3 002
347
26
Alsace
www.minecraftforgefrance.fr
sinon il semblerais que j'ai trouver un correctif qui serais vendu 10 euros.

https://minedev.fr ( je n'ai pas mis le lien complet juste le lien du site qui le propose pour ne pas faire de la publicités mais c'est dans la partie boutique/configuration et ils donnent plus de détail ici

http://www./forum/index.php?threads/tuto-faille-nbt.152646/

Donc j'aimerais savoir si ce site est digne de confiance
Personnellement je ne ferai pas confiance à ce site. Le type en question a présenté aussi sont "correctif" sur minecraft- france.fr, et il se trouve qu'il a modifier la bibliothèque Guava, or je ne vois pas comment cela pourrait corriger le problème. Surtout que cette même personne vend des plugins sur son site, or l'EULA, interdit la vente de plugins ou autre modification du jeu. Ce qu'ils fond est illégale, donc ...

J'aurai bien distribué un correctif gratuit, seulement il me faut les sources de spigot 1.7.10, or je ne les ai pas trouvé, et le bricolage que j'ai tenté avec un décompilateur Java n'a pas fonctionné.
 
  • J'aime
Reactions: Diagamma

Ophis_Ouroboros

Aventurier
6 Mai 2015
5
0
2
30
si c'est juste pour décompiler une classe notre codeur java dit que jdGui fonctionne très bien.

Ps: notre codeur penses avoir trouver une solution avec ceci.


Code:
public NBTTagCompound b() {
    short short1 = readShort();
 
    if (short1 < 0) {
      return null;
    }
    byte[] abyte = new byte[short1];
 
    readBytes(abyte);
    return NBTCompressedStreamTools.a(abyte, new NBTReadLimiter(2097152L));
  }



qu'il a trouver dans spigot 1.7.10 dans la classe PacketDataSerializer.java qui se trouve dans le package net.minecraft.version avec tout les packets.

et ont voudrais le tester mais je n'ai pas compris comment installer le programme en python de "amar" ( je n'ai pas retrouver son nom exact mais tu m'as envoyer le lien dans la premiere page.