Issue #3978 - HTTP/2 vulnerabilities.

Small fixed after review.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
This commit is contained in:
Simone Bordet 2019-08-19 11:38:01 +02:00
parent 5fc83c3d0c
commit 5184c4ec3d
4 changed files with 12 additions and 12 deletions

View File

@ -45,7 +45,7 @@ public class ContinuationBodyParser extends BodyParser
{
if (hasFlag(Flags.END_HEADERS))
{
onHeaders();
onHeaders(buffer);
}
else
{
@ -90,7 +90,7 @@ public class ContinuationBodyParser extends BodyParser
headerBlockFragments.storeFragment(buffer, length, last);
reset();
if (last)
return onHeaders();
return onHeaders(buffer);
return true;
}
}
@ -103,15 +103,20 @@ public class ContinuationBodyParser extends BodyParser
return false;
}
private boolean onHeaders()
private boolean onHeaders(ByteBuffer buffer)
{
ByteBuffer headerBlock = headerBlockFragments.complete();
MetaData metaData = headerBlockParser.parse(headerBlock, headerBlock.remaining());
if (metaData == null)
return true;
if (metaData == HeaderBlockParser.SESSION_FAILURE)
return false;
if (metaData == null || metaData == HeaderBlockParser.STREAM_FAILURE)
return true;
HeadersFrame frame = new HeadersFrame(getStreamId(), metaData, headerBlockFragments.getPriorityFrame(), headerBlockFragments.isEndStream());
if (metaData == HeaderBlockParser.STREAM_FAILURE)
{
if (!rateControlOnEvent(frame))
return connectionFailure(buffer, ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, "invalid_continuation_frame_rate");
}
notifyHeaders(frame);
return true;
}

View File

@ -103,11 +103,6 @@ public class HeaderBlockParser
{
if (LOG.isDebugEnabled())
LOG.debug(x);
if (!headerParser.getRateControl().onEvent(x))
{
notifier.connectionFailure(buffer, ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, "invalid_header_frame_rate");
return SESSION_FAILURE;
}
notifier.streamFailure(headerParser.getStreamId(), ErrorCode.PROTOCOL_ERROR.code, "invalid_hpack_block");
return STREAM_FAILURE;
}

View File

@ -75,7 +75,7 @@ public class SettingsBodyParser extends BodyParser
{
SettingsFrame frame = new SettingsFrame(Collections.emptyMap(), hasFlag(Flags.ACK));
if (!rateControlOnEvent(frame))
connectionFailure(buffer, ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, "invalid_settings_frame");
connectionFailure(buffer, ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, "invalid_settings_frame_rate");
else
onSettings(frame);
}

View File

@ -39,7 +39,7 @@ public class UnknownBodyParser extends BodyParser
cursor = consume(buffer, length);
boolean parsed = cursor == 0;
if (parsed && !rateControlOnEvent(new UnknownFrame(getFrameType())))
return connectionFailure(buffer, ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, "invalid_unknown_frame");
return connectionFailure(buffer, ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, "invalid_unknown_frame_rate");
return parsed;
}