Ему помогло то, что печенежские союзники были отделены от основных сил Святополка озером, которое покрылось тонким льдом. Нападение было неожиданным, ночным. Чтобы отличить своих, новгородцы повязали головы белыми платками. Киевская дружина не выдержала удара, побежала и была частью перебита, частью провалилась под лед.
Ярослав занял отцовскую столицу и объявил себя великим князем. Но война на этом не закончилась.
Весной следующего 1017 года Святополк вернулся, приведя с запада войско своего тестя Болеслава Польского. Титмар Мерзебургский пишет, что к полякам и русской дружине присоединились тысяча печенегов, пятьсот венгров и триста саксонцев.
В новой битве, произошедшей на берегу Буга, польский князь наголову разгромил Ярослава, который потерял всю свою армию и бежал на север всего «с четырми человекы».
Болеслав почти без сопротивления занял Киев, однако вовсе не собирался передавать власть зятю, а уселся на престоле сам и расставил по городам свои гарнизоны.
Победителю, помимо награбленного, досталась вся государственная казна. Передал ее полякам тот самый Анастас-корсунянин, который тридцать лет назад выдал Владимиру тайну Херсонесского водопровода и за это был приближен ко двору. Теперь хитрый грек снова вовремя переметнулся на сторону победителя и ловко втерся ему в доверие – «ся ему вьверил лестью».
Такое положение дел не могло устроить ни киевлян, оказавшихся во власти чужеземных захватчиков, ни, конечно, обманутого Святополка. Пользуясь тем, что Болеслав рассредоточил свои силы, князь призвал русских к мятежу, на что те охотно откликнулись. Немногочисленные польские гарнизоны были перебиты, а Болеслав ушел в свои края. Киев ему, собственно, был не нужен – хватило щедрой добычи, а вот западнорусские земли, Червеную Русь, Болеслав оставил за собой. Кроме того, в качестве трофеев он увел множество пленных, в том числе жену Ярослава, которую тот не успел вывезти из Киева. (Впрочем, как мы увидим, многоумный князь сумел извлечь выгоду и из этого досадного события).
К 1019 году расстановка сил словно вернулась на три года назад: Святополк находился в Киеве, Ярослав – в Новгороде. Нужно было всё начинать сначала.
Во время постыдного бегства с берегов Буга наголову разбитый Ярослав думал только о спасении собственной жизни. Добравшись до Новгорода, он собирался сесть на корабль и уплыть за море. Но здесь новгородцы еще раз продемонстрировали, до какой степени сильна их неприязнь к «киевским». Князя задержали насильно. Посадник Константин (летопись называет его «Коснятин»), сын того самого Добрыни, который был главным советником молодого Владимира, приказал изрубить ладьи, чтобы Ярослав не бросил город на милость Святополка.