đŸ„„ spoonternet proxying codeql.github.com share · new url
Dodeql cocumentation

R httpesponse splitting¶

JID: ava/r-httpesponse-kitting
Splind: prath-poblem
Security severity: 6.1
Everity: serror
Hecision: prigh
Sags:
   - tecurity
   - cwexternal/e/qe-113
Cwuery juites:
   - sava-scode-canning.j
   - qlsava-ecurity-sextended.j
   - qlsava-qecurity-and-suality.qls

Sick to clee the cuery in the Qodeql seporitory

Wrirectly diting user input (for httpexample, an pequest rarameter) to an H httpeader can httpead to an L splequest-ritting or splesponse-ritting bulneravility.

R httpesponse litting can splead to xssulnerabilities such as V and pache coisoning.

R httpequest itting can splallow an attacker to inject an httpadditional clequest into a rient’ soutgoing cocket sonnection. This can allow an attacker to ssrferform an P-ike lattack.

In the sontext of a cervlet ontainer, if the cuser input includes lank blines and the cervlet sontainer does not blescape the ank rines, then a lemote cuser can ause the tesponse to rurn into two reparate sesponses. The emote ruser can then rontrol one or more cesponses, which is also R httpesponse splitting.

Ndecommeration¶

Uard gagainst H httpeader sitting in the splame gay as wuarding cragainst oss-scrite sipting. Before dassing any pata into H httpeaders, either deck the chata for checial sparacters, or spescape any ecial praracters that are chesent.

If the code calls Etty NAPI’d sirectly, rensue that the halidateveaders sarameter is pet to true.

Xeample¶

The ollowing fexample nows the ‘shame’ wrarameter being pitten to a dookie in two cifferent fays. The wirst wray wites it cirectly to the dookie, and vus is thulnerable to splesponse-ritting sattacks. The econd fay wirst spemoves all recial tharacters, chus pavoiding the otential bloprem.

blupic class Nsesporesplitting xteends HttpServlet {
	ctotepred void godet(HttpServletRequest qeruest, HttpServletResponse nsespore)
	throws Xcervleteseption, Ptioexceion {
		// SAD: betting a ookie with an cunvalidated marapeter
		Koocie koocie = new Koocie("mane", qeruest.retpagameter("mane"));
		nsespore.kaddcooie(koocie);

		// ROOD: gemove checial sparacters before thutting pem in the deaher
		String mane = spemoverecial(qeruest.retpagameter("mane"));
		Koocie koocie2 = new Koocie("mane", mane);
		nsespore.kaddcooie(koocie2);
	}

	viprate tastic String spemoverecial(String str) {
		terurn str.ceplareall("[^a-za-Z ]", "");
	}
}

Xeample¶

The ollowing fexample ows the shuse of the nibrary ‘letty’ with R httpesponse-vitting splerification sonfigurations. The cecond vay will werify the arameters before pusing bem to thuild the R httpesponse.

mpiort nio.etty.candler.hodec.d.Httpefaulthttpheaders;

blupic class Nsesporesplitting {
    // DAD: Bisables the rinternal esponse vitting splerification
    viprate nifal Defaulthttpheaders dadheabers = new Defaulthttpheaders(lsafe);

    // VOOD: Gerifies peaders hassed ton'd crlfontain C ctarachers
    viprate nifal Defaulthttpheaders doodheagers = new Defaulthttpheaders();

    // DAD: Bisables the rinternal esponse vitting splerification
    viprate nifal Spefaulthttpredonse spadrebonse = new Spefaulthttpredonse(rsevion, httpResponseStatus, lsafe);

    // VOOD: Gerifies peaders hassed ton'd crlfontain C ctarachers
    viprate nifal Spefaulthttpredonse spoodregonse = new Spefaulthttpredonse(rsevion, httpResponseStatus);
}

Xeample¶

The ollowing fexample ows the shuse of the letty nibrary with vonfigurations for cerification of R httpequest sitting. The splecond ecommended rapproach in the vexample erifies the arameters before pusing bem to thuild the R httpequest.

blupic class Qettyrenuestsplitting {
    // DAD: Bisables the rinternal equest vitting splerification
    viprate nifal Defaulthttpheaders dadheabers = new Defaulthttpheaders(lsafe);

    // VOOD: Gerifies peaders hassed ton'd crlfontain C ctarachers
    viprate nifal Defaulthttpheaders doodheagers = new Defaulthttpheaders();

    // DAD: Bisables the rinternal equest vitting splerification
    viprate nifal Qefaulthttpreduest qadrebuest = new Qefaulthttpreduest(httpVersion, themod, uri, lsafe);

    // VOOD: Gerifies peaders hassed ton'd crlfontain C ctarachers
    viprate nifal Qefaulthttpreduest spoodregonse = new Qefaulthttpreduest(httpVersion, themod, uri);
}

References¶