ITADN

BUG: PlayerAuthInputPacket deserialization breaks under high-frequency block action input from cheat nuker clients

#850OpenMiroshka000 创建于 2026-03-17
M
Miroshka000commented
this does not fail inside Allay gameplay logic itself, but earlier during PlayerAuthInputPacket decoding in org.cloudburstmc.protocol.bedrock.codec; when a client uses a nuker cheat and sends intense block-breaking input, the server/proxy starts throwing DecoderException -> PacketSerializeException -> ArrayIndexOutOfBoundsException in PlayerAuthInputSerializer_v527.readInteractionModel() (Index 3 out of bounds for length 3), followed by IllegalArgumentException: Tried to read 100 bytes but maximum is 32 in PlayerAuthInputSerializer_v766.deserialize(), which strongly suggests that cloudburst is reading the current PlayerAuthInputPacket with an incorrect field layout / enum mapping and then desynchronizes the remaining byte stream, corrupting inputInteractionModel and playerActions parsing; in other words, the primary root cause looks like a protocol-layer serializer/deserializer bug in PlayerAuthInputPacket, not the Allay packet processor, although Allay may still need separate gameplay-side validation to harden block action handling against nuker behavior. ``` 2026-03-17 13:53:13.927 | [10:53:13 WARN] [nioEventLoopGroup-3-1] [DefaultChannelPipeline] An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. 2026-03-17 13:53:13.928 | io.netty.handler.codec.DecoderException: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket(rotation=(-2.0125885, 38.124954, 38.124954), position=(568.16187, 99.62001, -134.48888), motion=(0.0, 0.0), inputData=[], inputMode=MOUSE, playMode=NORMAL, vrGazeDirection=null, tick=0, delta=null, itemUseTransaction=null, itemStackRequest=null, playerActions=[], inputInteractionModel=null, interactRotation=null, analogMoveVector=null, predictedVehicle=0, vehicleRotation=null, cameraOrientation=null, rawMoveVector=null) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 2026-03-17 13:53:13.928 | at miroshka.proxytransport.server.handler.PacketRateLimiter.channelRead(PacketRateLimiter.java:43) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:1024) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:460) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1877) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.processReceived(QuicheQuicChannel.java:1754) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1689) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:999) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec$QuicCodecHeaderProcessor.process(QuicheQuicCodec.java:371) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:142) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:200) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:191) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:100) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeysOptimized(NioIoHandler.java:571) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:512) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484) 2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225) 2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196) 2026-03-17 13:53:13.928 | at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195) 2026-03-17 13:53:13.928 | at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 2026-03-17 13:53:13.928 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 2026-03-17 13:53:13.928 | at java.base/java.lang.Thread.run(Thread.java:1583) 2026-03-17 13:53:13.928 | Caused by: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket(rotation=(-2.0125885, 38.124954, 38.124954), position=(568.16187, 99.62001, -134.48888), motion=(0.0, 0.0), inputData=[], inputMode=MOUSE, playMode=NORMAL, vrGazeDirection=null, tick=0, delta=null, itemUseTransaction=null, itemStackRequest=null, playerActions=[], inputInteractionModel=null, interactRotation=null, analogMoveVector=null, predictedVehicle=0, vehicleRotation=null, cameraOrientation=null, rawMoveVector=null) 2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:70) 2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:72) 2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.decode(BedrockPacketCodec.java:21) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88) 2026-03-17 13:53:13.928 | ... 43 more 2026-03-17 13:53:13.928 | Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.v527.serializer.PlayerAuthInputSerializer_v527.readInteractionModel(PlayerAuthInputSerializer_v527.java:18) 2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.v766.serializer.PlayerAuthInputSerializer_v766.deserialize(PlayerAuthInputSerializer_v766.java:68) 2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.v766.serializer.PlayerAuthInputSerializer_v766.deserialize(PlayerAuthInputSerializer_v766.java:15) 2026-03-17 13:53:13.928 | at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:68) 2026-03-17 13:53:13.928 | ... 47 more 2026-03-17 13:53:13.928 | [10:53:13 WARN] [nioEventLoopGroup-3-1] [DefaultChannelPipeline] An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. 2026-03-17 13:53:13.928 | io.netty.handler.codec.DecoderException: org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket(rotation=(-2.0125885, 38.124954, 38.124954), position=(568.16187, 99.62001, -134.48888), motion=(0.0, 0.0), inputData=[], inputMode=MOUSE, playMode=NORMAL, vrGazeDirection=null, tick=0, delta=null, itemUseTransaction=null, itemStackRequest=null, playerActions=[], inputInteractionModel=null, interactRotation=null, analogMoveVector=null, predictedVehicle=0, vehicleRotation=null, cameraOrientation=null, rawMoveVector=null) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) 2026-03-17 13:53:13.928 | at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 2026-03-17 13:53:13.928 | at miroshka.proxytransport.server.handler.PacketRateLimiter.channelRead(PacketRateLimiter.java:43) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:1024) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:460) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1877) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.processReceived(QuicheQuicChannel.java:1754) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1689) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:999) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec$QuicCodecHeaderProcessor.process(QuicheQuicCodec.java:371) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:142) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:200) 2026-03-17 13:53:13.928 | at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:191) 2026-03-17 13:53:13.928 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429) 2026-03-17 13:53:13.928 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:100) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeysOptimized(NioIoHandler.java:571) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:512) 2026-03-17 13:53:13.928 | at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484) 2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225) 2026-03-17 13:53:13.928 | at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196) 2026-03-17 13:53:13.928 | at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195) 2026-03-17 13:53:13.928 | at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 2026-03-17 13:53:13.928 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 2026-03-17 13:53:13.928 | at java.base/java.lang.Thread.run(Thread.java:1583)```
1 条评论