Home > Java, JPA > JBoss SEAM i EJB-QL injection

JBoss SEAM i EJB-QL injection

A jednak. Nawet tak zaawansowany framework jak JBoss SEAM może być podatny na ataki EJB-QL injection. EJB-QL injection jest podobny do SQL injection, z tą różnicą że nie atakujemy kodu SQL a kod EJB-QL. Mam najnowszą wersję: jboss-seam-2.0.0.CR2. Błąd jest w pomyślne na klasę: org.jboss.seam.framework.Query w metodzie getRenderedEjbql(). Czytamy tam:
if ( getOrder()!=null ) builder.append(" order by ").append( getOrder() );
return builder.toString();
Parametr order pochodzi z żądania HTTP. To co zły człowiek możemy zrobić zależy od implementacji JPA i serwera bazy danych. Mi nie przychodzi akurat nic złego do głowy. Uważam jednak, że ten kod biblioteki SEAM trzeba jeszcze raz przemyśleć i koniecznie przepisać. Zapewne pogadamy o tym na Warszawskim JUGu. Aktualizacja po przerwie na kanapkę. W nagrodę za znalezienie błędu w SEAMie postanowiłem zjeść kanapkę. Dawka energii sprawiła, że znalazłem szybkie rozwiązanie. W klasie dziedziczącej – implementującej naszą listę obiektów musimy ustalić listę dozwolonych sortowań, na przykład tak:
private static final String[] ORDERS = {name asc","name desc","id asc","id desc"};
@Override
public void setOrder(String order){
  if (Arrays.asList(ORDERS).contains(order)) {
    super.setOrder(order);
  }
}
W ten sposób zabezpieczymy się przed ryzykiem na przykład tego, że zły człowiek wciśnie nam sortowanie po procedurze SQL odpowiedzialnej za kasowanie userów.
Categories: Java, JPA Tags:
  1. Antoni Jakubiak
    October 12th, 2007 at 08:33 | #1

    Błąd zgłosiłem (moim kaczym angielskim):

    http://jira.jboss.com/jira/browse/JBSEAM-2084

  2. erace
    October 13th, 2007 at 09:50 | #2

    Bravo. Wlasnie stales sie czescia sporej grupy ludzi dobrej woli pracujacej nad poprawa jakosci oprogramowania open source ;-).

  1. No trackbacks yet.

Subscribe without commenting