Potential DoS vulnerability via decompression bomb

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

DESCRIPTION A maliciously crafted archive may produce a large amount of data on decompression that may lead to a denial-of-service (DoS) attack on the application.

It is recommended to use io.CopyN instead of io.Copy and io.CopyBuffer to control the number of bytes copied from the decompression reader.

BAD PRACTICE:

package main

import ( "bytes" "compress/zlib" "io" "os" )

func foo(b io.Reader) { r, err := zlib.NewReader(b) if err != nil { panic(err) }

_, err = io.Copy(os.Stdout, r)
if err != nil {
    panic(err)
}

r.Close()

}

RECOMMENDED:

package main

import ( "bytes" "compress/zlib" "io" "os" )

func foo(b io.Reader) { r, err := zlib.NewReader(b) if err != nil { panic(err) }

_, err = io.CopyN(os.Stdout, r, 1024) // "n" may change depending on the application
if err != nil {
    panic(err)
}

r.Close()

}

REFERENCES CWE-409

Potential DoS vulnerability via decompression bomb in: workhorse/cmd/gitlab-zip-cat/main.go

	fatalError(fmt.Errorf("write file size invalid"), err)
}

if _, err := io.Copy(os.Stdout, reader); err != nil {
	fatalError(fmt.Errorf("write %q from %q to stdout", fileName, scrubbedArchivePath), err)
}

}

Potential DoS vulnerability via decompression bomb in: workhorse/internal/lsif_transformer/parser/parser_test.go

	require.NoError(t, err)
	defer outputFile.Close()

	_, err = io.Copy(outputFile, zippedFile)
	require.NoError(t, err)
}

} Potential DoS vulnerability via decompression bomb in: workhorse/internal/zipartifacts/open_archive_test.go

	r, err := zf.Open()
	require.NoError(t, err)

	_, err = io.Copy(io.Discard, r)
	require.NoError(t, err)

	require.NoError(t, r.Close())
Edited by 🤖 GitLab Bot 🤖