Нашел решение фикса ауза без замены файлов и сейчас я с вами им поделюсь.
Замена классов для фикса мне показалась не очень оптимистичной, потому как есть разные аузы по структуре пароля (base64,md5,0x) и под версии 1.3.1- и 1.4.4+.
Я выделил за всё время две причины падения.
1. Кодировка
2. Кладут злоумышленники очень длинным логином
Решение с кодировкой уже давно известно, просто прикреплю его сюда для полноты фикса.
Поговорим о том, как же добиваются падения ауза через очень длинный логин?
Тут расчет идет на то, что будет вызвана ошибка JDBC драйвера.
При проверке логина и пароля ауз вызывает процедуру acquireuserpasswd которой передает логин.
В структуре процедуры задано, что максимальная длинна логина varchar(64) это 64 буквы.
Когда вводят логин больше 64 букв, у нас появляется ошибка и падает ауз.
В самой ошибке нет ничего серьзеного - тут нас просто предупреждают что логин очень длинный. Но при этом работоспособность auth падает.
Самое лаконичное решение на мой взгляд убрать эти экцепшены. И благо такое решение нашлось.
Открываем файл table.xml
Находим строчку с паролем базы.
В ней надо сменить кодировку utf8 на ascii это первую проблему решит.
И добавить &jdbcCompliantTruncation=false - отключение тормозящих ошибок.
Если ставите строку целиком, то в ней надо поменять данные на свои: названиеБазы, пользователь, вашПароль.
Замена классов для фикса мне показалась не очень оптимистичной, потому как есть разные аузы по структуре пароля (base64,md5,0x) и под версии 1.3.1- и 1.4.4+.
Я выделил за всё время две причины падения.
1. Кодировка
2. Кладут злоумышленники очень длинным логином
Решение с кодировкой уже давно известно, просто прикреплю его сюда для полноты фикса.
Поговорим о том, как же добиваются падения ауза через очень длинный логин?
Тут расчет идет на то, что будет вызвана ошибка JDBC драйвера.
При проверке логина и пароля ауз вызывает процедуру acquireuserpasswd которой передает логин.
В структуре процедуры задано, что максимальная длинна логина varchar(64) это 64 буквы.
Когда вводят логин больше 64 букв, у нас появляется ошибка и падает ауз.
Код:
GQueryPasswd:account is 545y54y5454y5454y545y454y5454y5454y545y454y5454y5445y454y5454y5454y54 , login ip is 95.72.75.78
Prepare procedure call:{call acquireuserpasswd(?,?,?)}
acquireIdPasswd exception:account=545y54y5454y5454y545y454y5454y5454y545y454y5454y5445y454y5454y5454y54
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'name1' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3556)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1356)
at com.mysql.jdbc.CallableStatement.execute(CallableStatement.java:877)
at application.procedure.handler.execute(handler.java:197)
at org.mono.StorageEx.acquireIdPasswd(StorageEx.java:319)
at protocol.MatrixPasswd.Server(MatrixPasswd.java:65)
at com.goldhuman.IO.Protocol.Rpc.Process(Unknown Source)
at com.goldhuman.IO.Protocol.Task.run(Unknown Source)
at com.goldhuman.Common.ThreadPool.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
В самой ошибке нет ничего серьзеного - тут нас просто предупреждают что логин очень длинный. Но при этом работоспособность auth падает.
Самое лаконичное решение на мой взгляд убрать эти экцепшены. И благо такое решение нашлось.
Открываем файл table.xml
Находим строчку с паролем базы.
В ней надо сменить кодировку utf8 на ascii это первую проблему решит.
И добавить &jdbcCompliantTruncation=false - отключение тормозящих ошибок.
Код:
<connection name="auth0" poolsize="3" url="jdbc:mysql://localhost:3306/названиеБазы?useUnicode=true&characterEncoding=ascii&jdbcCompliantTruncation=false" username="пользователь" password="вашПароль"/>